Présentation SFEIR Share: Quand le pré-chargement l'emporte sur le streaming - l'avantage du cache

J’ai présenté mon article Quand le pré-chargement l’emporte sur le streaming : l’avantage du cache lors de l’événement SFEIR Share.

Introduction

Bonjour à tous. Aujourd’hui, je vais vous présenter le contenu de mon article : “Quand le pré-chargement l’emporte sur le streaming : l’avantage du cache”.

Je vais comparer deux manières différentes de livrer des pages web : le streaming, qui est de plus en plus supporté par les frameworks, et le pre-loading, qui reçoit moins d’attention. Je montre que les deux optimisations peuvent fournir des performances similaires. Je compare les deux approches en profondeur, montrant dans quelle situation chacune est la meilleure.

En fait, un but de l’écriture de mon article est de rappeler les limites du streaming et défendre le pre-loading en tant qu’optimisation simple et efficace qui mérite une intégration plus poussée dans les frameworks web.


Simulation

Pour être aussi équitable que possible dans ma comparaison, j’ai créé et utilisé un simulateur pour générer les diagrammes de chargement de différents scénarios.

Les diagrammes que je vais montrer sur ces slides sont très simplifiés et créés à la main. Je vous invite à consulter l’article pour les diagrammes générés par simulation qui ont des détails plus fins, distinguant :

L’article donne également accès à un environnement de simulation permettant de tester différents paramètres tels que la bande passante du réseau, la taille des fichiers, le temps de traitement, etc.


Table des matières


La page à optimiser

Voici l’énoncé du problème : nous avons une page web qui contient deux types de contenu :

Nous voulons charger cette page aussi rapidement et efficacement que possible.


Montrons d’abord une manière très naïve de livrer notre page : le serveur retourne un document HTML vide qui charge un script qui, une fois chargé sur le client, chargera les parties semi-statique et dynamique de la page.

Je montre cet exemple ici uniquement comme pire cas, illustrant clairement le principal problème de performance : la latence induite par les allers-retours réseau entre le client et le serveur, et le fait qu’il faut exécuter le script côté client avant même que le serveur ne commence à charger ou à générer le contenu de la page.


Streaming de page complète

Voyons maintenant comment charger cette page avec du streaming :


Page divisée avec pre-loading

Voyons maintenant une autre façon de charger cette page : en divisant les parties semi-statiques et dynamiques en 2 ressources différentes.


Comparaison (1)

Si nous comparons les approches de pre-loading et de streaming, le streaming semble l’emporter ici car il commence à charger le contenu dynamique de la page plus tôt.

Voyons ce qui se passe quand nous ajoutons la mise en cache.


Mise en cache

Ajoutons maintenant deux couches de cache :


Streaming avec le cache côté edge

Regardons le diagramme de chargement pour la version en streaming de la page :


Pre-loading avec le cache côté edge

Regardons maintenant le diagramme de chargement pour la page divisée avec pre-loading :


Comparaison (2)

Si nous comparons les deux approches en présence du cache edge, nous voyons que la version avec pre-loading l’emporte sur la version streaming en termes de First-Paint et de chargement final. Le client reçoit le contenu semi-statique et le script statique plus tôt, dégageant la voie pour un traitement plus rapide du contenu dynamique.


Assemblage de page côté edge

Nous avons vu que l’approche streaming ne pouvait pas profiter pleinement du cache edge car les parties semi-statiques et dynamiques sont groupées en une seule ressource.

Ce problème peut être réglé en faisant du calcul côté edge. Parmi les solutions possibles, je cite :


Streaming avec assemblage côté edge

Regardons le diagramme de chargement de la page quand elle est assemblée sur l’edge.


Comparaison (Assemblage côté edge)

Maintenant, grâce à l’assemblage côté edge, l’approche streaming récupère son avantage sur la version pre-loading, car elle est aussi efficace pour charger la partie semi-statique, et la partie dynamique commence à charger plus tôt.


Utilisateurs récurrents

Streaming avec assemblage côté edge, pour les utilisateurs récurrents

Examinons ce qui se passe quand un utilisateur récurrent revisite notre page en streaming avec un cache récent.


Pre-loading avec cache, pour les utilisateurs récurrents

Quand un utilisateur revisite notre page pré-chargée avec un cache récent, les choses sont un peu différentes :


Comparaison (Utilisateurs récurrents)

Pour les utilisateurs récurrents avec un cache récent, le pre-loading donne un First-Paint plus rapide que le streaming. Le pre-loading arrive également à charger la partie dynamique de la page aussi vite que le streaming.


En résumé

Ce que nous pouvons conclure de tout cela est que les deux techniques, streaming de page complète et page divisée avec pre-loading, améliorent les performances de chargement. Le pre-loading surpasse le streaming et inversement dans différents contextes :


Support dans les frameworks