Cloudflare, Mozilla et Facebook développent BinaryAST pour accélérer le chargement du JavaScript.

Les ingénieurs de Cloudflare, Mozilla, Facebook et Bloomberg ont été proposés nouveau format BinaryAST pour accélérer la livraison et le traitement du code JavaScript lors de l'ouverture de sites dans un navigateur. BinaryAST déplace la phase d'analyse syntaxique vers le serveur et fournit déjà un arbre syntaxique abstrait (AST). Lors de l'utilisation de BinaryAST, le navigateur peut immédiatement passer à l'étape de compilation, en contournant l'analyse du code source JavaScript.

Pour les tests préparée une implémentation de référence, fournie sous licence MIT. Pour l'analyse, des composants Node.js sont utilisés, et le code pour l'optimisation et la génération de l'AST est écrit en Rust. Du cÎté des navigateurs, la prise en charge de
BinaryAST est dĂ©jĂ  disponible dans versions nocturnes Firefox. L'encodeur de BinaryAST peut ĂȘtre appliquĂ© Ă  la fois au niveau des outils du site final et pour l'emballage de scripts de sites externes du cĂŽtĂ© du proxy ou du rĂ©seau de diffusion de contenu. Le processus de standardisation de BinaryAST a dĂ©jĂ  commencĂ© dans le groupe de travail ECMA TC39, aprĂšs quoi le format pourra coexister avec les mĂ©thodes de compression de contenu existantes, telles que gzip et brotli.

Cloudflare, Mozilla et Facebook développent BinaryAST pour accélérer le chargement du JavaScript.

Cloudflare, Mozilla et Facebook développent BinaryAST pour accélérer le chargement du JavaScript.

Le temps de traitement du JavaScript est considĂ©rablement impactĂ© par la phase de chargement et d'analyse syntaxique du code. Étant donnĂ© que le volume de JavaScript tĂ©lĂ©chargĂ© sur de nombreux sites populaires approche les 10 Mo (par exemple, pour LinkedIn — 7,2 Mo, Facebook — 7,1 Mo, Gmail — 3,9 Mo), le traitement initial du JavaScript entraĂźne un retard significatif. La phase d'analyse du cĂŽtĂ© du navigateur est Ă©galement ralentie en raison de l'incapacitĂ© Ă  construire complĂštement l'AST Ă  la volĂ©e, au fur et Ă  mesure que le code est tĂ©lĂ©chargĂ© (le navigateur doit attendre la fin du tĂ©lĂ©chargement des blocs de code, par exemple la fin des fonctions, pour obtenir des informations manquantes nĂ©cessaires Ă  l'analyse des Ă©lĂ©ments en cours).

Une partie du problĂšme est tentĂ©e de ĂȘtre rĂ©solue par la diffusion de code de maniĂšre minimisĂ©e et compressĂ©e, ainsi que par le biais de la mise en cache du bytecode gĂ©nĂ©rĂ© par le navigateur. Sur les sites modernes, le code est mis Ă  jour assez frĂ©quemment, donc la mise en cache ne rĂ©sout que partiellement le problĂšme. Une solution possible pourrait ĂȘtre WebAssembly, mais il nĂ©cessite l'utilisation de typage explicite dans le code et convient mal pour accĂ©lĂ©rer le traitement du code JavaScript dĂ©jĂ  existant.

Une autre option consiste Ă  fournir du bytecode compilĂ© prĂȘt Ă  l'emploi au lieu de scripts JavaScript, mais les dĂ©veloppeurs des moteurs de navigateur s'y opposent, car le bytecode tiers est difficile Ă  vĂ©rifier, son traitement direct peut entraĂźner un dĂ©gradement du Web, des menaces de sĂ©curitĂ© supplĂ©mentaires apparaissent et il faut dĂ©velopper un format de bytecode universel.

BinaryAST permet de s'intégrer dans le modÚle actuel de développement et de livraison de code sans créer un nouveau bytecode ni modifier le langage JavaScript. La taille des données au format BinaryAST est comparable à celle du JavaScript compressé et minimisé, tandis que la vitesse de traitement est notablement augmentée grùce à l'élimination de la phase d'analyse des textes sources. De plus, le format permet de compiler en bytecode pendant que BinaryAST est chargé, sans attendre d'avoir reçu toutes les données. En outre, l'analyse cÎté serveur permet d'exclure du rendu de BinaryAST les fonctions inutilisées et le code superflu, pour lequel une analyse cÎté navigateur consomme du temps tant pour le traitement que pour le transfert de trafic inutile.

Une caractĂ©ristique de BinaryAST est Ă©galement la possibilitĂ© de restaurer le JavaScript lisible, qui n'est pas exactement identique Ă  la version originale, mais qui est sĂ©mantiquement Ă©quivalent et comprend les mĂȘmes noms de variables et de fonctions (BinaryAST conserve les noms, mais ne conserve pas les informations sur les positions dans le code, le formatage et les commentaires). L'envers de la mĂ©daille est l'apparition de nouveaux vecteurs d'attaque, mais selon les dĂ©veloppeurs, ils sont significativement moins nombreux et plus contrĂŽlables que lors de l'utilisation d'alternatives, telles que la distribution de bytecode.

Les tests du code de facebook.com ont montré que l'analyse du JavaScript consomme 10 à 15 % des ressources CPU et que l'analyse prend plus de temps que la génération de bytecode et la formation initiale du code pour JIT. Dans le moteur SpiderMonkey, le temps de construction complet de l'AST est de 500 à 800 ms, et l'application de BinaryAST a permis de réduire ce chiffre de 70 à 90 %.
Globalement, pour la plupart des frameworks web, l'utilisation de BinaryAST réduit le temps d'analyse du JavaScript de 3 à 10 % en mode sans optimisation et de 90 à 97 % en activant le mode d'ignorance des fonctions inutilisées.
Lors de l'exécution d'un ensemble de tests JavaScript de 1,2 Mo, l'application de BinaryAST a permis de réduire le temps de démarrage de 338 à 314 ms sur un systÚme de bureau (Intel i7) et de 2019 à 1455 ms sur un appareil mobile (HTC One M8).

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster