Aller au contenu

Utilisateur:JALandry/Brouillon

Une page de Wikipédia, l'encyclopédie libre.

Polaris, créé par le Science and Artificial Intelligence Lab (CSAIL) du MIT, est un système permettant de charger les pages web différemment, utilisant un graphique des dépendances. Les auteurs de cette recherche sont Ravi Netravali, étudiant en doctorat, Ameesh Goyal, étudiant gradué, le professeur Hari Balakrishnan ainsi que le professeur d'Harvard, James Mickens[1].

Le temps que prend une page web à charger préoccupe beaucoup de gens, puisqu'il a été démontré que des délais supplémentaires, même de seulement quelques millisecondes, peuvent conduire des utilisateurs à abandonner un site, ce qui peut entraîner des pertes de millions de dollars en revenu pour les propriétaires des pages. Avoir un meilleur temps de chargement pour son site permet aussi un meilleur classement par les moteurs de recherches.[1]

Chargement d'une page sans Polaris[modifier | modifier le code]

Exemple d'un arbre DOM dans un document HTML

Pour charger une page web, le navigateur va parcourir le code HTML et générer ce qu'on appelle le Document Object Model (DOM). Il représente l'arborescence de toutes les balises HTML, dans l'ordre qu'elles sont présentes dans le code. Le navigateur va ensuite générer un autre arbre DOM contenant cette fois les objets à afficher sur la page une fois que ceux-ci ont été traités. Il peut arriver qu'en parcourant le code HTML, le navigateur tombe sur d'autres objets à aller récupérer et évaluer. Par exemple, une page web peut appeler un fichier de code JavaScript. Lorsque le navigateur arrive sur la balise script faisant cet appel, il doit donc arrêter de parcourir le code HTML pour aller récupérer ce fichier, puisque celui-ci pourrait modifier le HTML plus loin dans la page. Ce fichier lui-même peut aussi faire appel à d'autres objets, par exemple des images, que le navigateur doit alors aller récupérer. C'est ce qu'on appelle des dépendances.[1]

Ils existent plusieurs types de dépendances. Un fichier de JavaScript a.js, par exemple, peut modifier une variable que va ensuite lire le fichier b.js. Dans ce cas, le navigateur doit exécuter a.js avant b.js pour respecter cette dépendance. Il peut cependant arriver qu'un fichier JavaScript doive lire une variable avant que celle-ci ne soit modifiée par un autre fichier ou même que deux fichiers différents modifient la même variable. Dans de tels cas, le navigateur doit respecter l'ordre dans lequel ces dépendances se présentent dans le code.[1]

Cependant, le navigateur ne voit pas toutes ces dépendances à l'avance. Il doit récupérer et exécuter un fichier JavaScript pour réaliser que celui-ci fait appel à une image, image qu'il doit maintenant aussi aller récupérer. Le navigateur va donc décider de l'ordre dans lequel charger les objets selon l'ordre dans lequel ils apparaissent dans le code. Par exemple, si une page HTML contient trois balises script contenant chacune un fichier JavaScript différent, le navigateur va d'abord aller récupérer le premier pour l'exécuter. Une fois terminé, il va aller chercher le deuxième fichier, puis ensuite le troisième. Cette façon de faire tend à ralentir le chargement de la page, puisque le navigateur doit faire plusieurs allers-retours sur le réseau pour récupérer et exécuter chacun des fichiers un à un, alors que si ces fichiers n'ont aucune interaction ensemble, le navigateur devrait pouvoir les récupérer en même temps.[1]

Chargement d'une page avec Polaris[modifier | modifier le code]

C'est ici que Polaris entre en jeu. Ce nouveau système fonctionne en deux parties.

D'abord, il utilise une infrastructure appelé Scout qui est en mesure de traquer toutes les dépendances au sein d'une page web. Il va noter, dans un journal détaillé, toutes les interactions que les objets vont avoir entres-eux. Par exemple, le journal pourra contenir tous les fichiers JavaScript qui interagissent avec une même variable. À partir de ces informations, Scout va générer un graphique des dépendances de la page.[1]

La deuxième partie de ce système est Polaris. Celui-ci utilise le graphique des dépendances généré par Scout pour déterminer l'ordre dans lequel charger les objets de la page. Polaris a accès à toutes les dépendances entre les objets d'une page à l'avance. Le navigateur n'est donc plus forcé de suivre l'ordre dans lequel les éléments apparaissent dans le code. Constatant par exemple qu'un fichier JavaScript b.js n'interagit pas avec un autre fichier a.js, il peut décider d'aller récupérer et exécuter b.js en même temps que a.js et ce, même si le fichier a.js vient avant dans la hiérarchie de la page.[1]

James Mickens propose une analogie pour expliquer comment fonctionne Polaris. Supposons qu'une personne décide de visiter une ville. Arrivée sur place, elle peut y découvrir d'autres villes qu'elle veut visiter avant de rentrer chez elle. Elle va donc visiter toutes les villes une à une au fur et à mesure qu'elle les découvre, comme le navigateur qui va aller récupérer les fichiers au fur et à mesure qu'il progresse dans le code HTML. Alors que cette personne pourrait simplement planifier à l'avance ses déplacements si elle avait accès à une liste de toutes les villes, lui permettant de trouver le chemin le plus rapide entre celles-ci. C'est ce que Polaris fait. Le graphique des dépendances est comme la carte des villes, que Scout fournit au navigateur et dont Polaris va ensuite se servir pour déterminer la façon la plus rapide de charger la page web.[2]

La performance de Polaris dépend à la fois du réseau et de la complexité de la page. Polaris tend à avoir de meilleurs résultats lorsque les délais sur le réseau sont élevés, comme c'est le cas pour un réseau cellulaire par exemple. Les pages web plus complexes bénéficies aussi plus du système, puisque ceux-ci possèdent plus d'objets, certains ayant une plus grande priorité par rapport à d'autres.[1]

Avantages de Polaris[modifier | modifier le code]

Après avoir été testé sur plus de 200 sites web populaires à travers le monde, il a été déterminé que Polaris permettait de charger les pages web 34% fois plus rapidement, allant jusqu'à 59% pour certains sites plus complexes, tel que le site du New York Times.[3]

Étant donné que Polaris est écrit en JavaScript, il ne nécessite pas de modification du navigateur pour être utilisé et peut théoriquement fonctionner sur tous les navigateurs.[1]

Avoir un journal détaillé de toutes les dépendances d'une page web permet aussi de traquer la source d'une erreur lorsque le site plante.[1]

Autres systèmes[modifier | modifier le code]

Polaris n'est pas le premier système à vouloir s'atteler à la tâche de réduire les temps de chargement des pages web. D'autres techniques ont été développées, notamment Brotli, un algorithme à source ouverte ou encore le protocole réseau SPDY, tout deux de Google.[1]

Ces techniques se concentrent surtout sur la compression des données et bien qu'elles soient utiles, il ne s'agit pas de la plus grande cause au ralentissement du chargement des pages web. Le problème majeur vient du nombre de voyages effectués à travers le réseaux pour récolter toutes les données plutôt que leur nombre.[1]

Notes et références[modifier | modifier le code]

  1. a b c d e f g h i j k et l (en) « Polaris: Faster Page Loads Using Fine-grained Dependency Tracking », sur http://web.mit.edu/ (consulté le )
  2. (en) « System loads Web pages 34 percent faster by fetching files more effectively », sur http://news.mit.edu/, (consulté le )
  3. (en) « Promising New MIT Internet Browser Tech Polaris Loads Websites up to 59% Faster », sur https://www.inverse.com/, (consulté le )