Fermer

octobre 15, 2018

Comment servir le code hérité aux navigateurs hérités


À propos de l'auteur

Shubham est un développeur front-end basé à Bangalore. Il glisse confortablement dans le continuum de la conception. Récemment, il a été…
Pour en savoir plus sur Shubham

Alors que le regroupement efficace de ressources sur le Web a fait couler beaucoup d'encre ces dernières années, la manière dont nous envoyons des ressources frontales à nos utilisateurs est restée à peu près la même. même. Le poids moyen des ressources JavaScript et de style associées à un site Web augmente – même si la création d'outils pour l'optimisation du site Web n'a jamais été meilleure. Alors que la part de marché des navigateurs à feuillage persistant augmente rapidement et que les navigateurs commencent à prendre en charge de nouvelles fonctionnalités, il est temps de repenser la fourniture d'actifs pour le Web moderne?

Un site Web reçoit aujourd'hui une part importante de son trafic de la part de navigateurs permanents, dont la plupart prennent en charge ES6 +, les nouvelles normes JavaScript, les nouvelles API de la plate-forme Web et les attributs CSS. Cependant, les navigateurs existants doivent encore être pris en charge dans un avenir proche – leur part d'utilisation est suffisamment importante pour ne pas être ignorée, en fonction du nombre d'utilisateurs.

Aperçu rapide de L'utilisation de caniuse.com Le tableau révèle que les navigateurs à feuilles persistantes occupent une part du lion du marché des navigateurs – plus de 75%. Malgré cela, la norme consiste à préfixer CSS, à transpiler tout notre code JavaScript vers ES5 et à inclure des polyfills pour prendre en charge tous les utilisateurs qui nous intéressent.

Bien que cela soit compréhensible dans un contexte historique, le Web a toujours été progressif. amélioration – la question demeure: ralentissons-nous Internet pour la majorité de nos utilisateurs afin de prendre en charge un nombre décroissant de navigateurs hérités?


 Transpilation to ES5, polyfills de plates-formes Web, ES6 + polyfills, préfixage CSS
Les différents couches de compatibilité d'une application Web. ( Agrandir la version )

Le coût de la prise en charge des anciens navigateurs

Essayons de comprendre en quoi différentes étapes d'un pipeline de construction typique peuvent ajouter du poids à nos ressources frontales:

Transpiling To ES5

Pour estimer le poids que le transfert peut générer ajouter à un paquet JavaScript, j'ai pris quelques bibliothèques JavaScript populaires connues à l'origine écrites en ES6 + et comparé leurs tailles de paquet avant et après transpilation:

Bibliothèque Taille
(minifiée ES6)
Taille
( ES5)
Différence
TodoMVC 8,4 KB 11 KB 24,5%
Draggable 77,9 KB 11,5 KB 31.3%
Luxon [19659018] 75.4 KB 100.3 KB 24.8%
Vidéo.js 237.2 KB 335.8 KB 29.4%
PixiJS 370.8 KB 452 KB 19659019] 18%

En moyenne, les liasses non transpilées sont environ 25% plus petites que celles transposées dans ES5. Cela n’est pas surprenant étant donné que ES6 + fournit une manière plus compacte et plus expressive de représenter la logique équivalente et que transpiler certaines de ces fonctionnalités vers ES5 peut nécessiter beaucoup de code.

ES6 + Polyfills

Babel réussit bien. tâche d'appliquer des transformations syntaxiques à notre code ES6 +, fonctionnalités intégrées introduites dans ES6 + – telles que Promise Map et Set ainsi que de nouvelles méthodes de tableau et de chaîne – encore besoin d'être rempli. Si vous déposez un babel-polyfill tel quel, votre paquet minifié peut atteindre près de 90 Ko.