Fermer

juillet 29, 2019

J'ai utilisé le Web pendant une journée avec un budget de 50 Mo


À propos de l'auteur

Chris Ashton est un développeur travaillant pour le service numérique gouvernemental. Quand il n’est pas occupé à coder, il aime chanter en tant que ténor dans le BBC Symphony Chorus.
Plus d'informations sur
Chris
Ashton

Les données peuvent être extrêmement coûteuses, en particulier dans les pays en développement. Chris Ashton se met dans la peau de quelqu'un dont le budget de données est serré et offre des conseils pratiques pour réduire l'empreinte de données de nos sites Web.

Cet article fait partie d'une série dans laquelle je tente d'utiliser le Web sous différentes contraintes, ce qui représente un compte tenu de la démographie de l'utilisateur. J'espère mettre en évidence les difficultés rencontrées par de vraies personnes, qui sont évitables si nous concevons et développons nos ressources de manière à répondre à leurs besoins.

La dernière fois, j'ai navigué sur le Web pendant une journée avec Internet Explorer. 8 . Cette fois, j'ai navigué sur Internet pendant un jour avec un budget de 50 Mo.

Pourquoi 50 Mo

Nous sommes nombreux à avoir la chance de pouvoir utiliser des forfaits mobiles qui permettent plusieurs giga-octets de transfert de données par mois. En cas d'échec, nous sommes généralement en mesure de nous connecter à des réseaux WiFi domestiques ou publics disposant de connexions haut débit rapides et de données effectivement illimitées.

Mais il existe des régions du monde où le coût des données mobiles est prohibitif et où il existe peu ou pas aucune infrastructure à large bande.

Les gens achètent souvent des paquets de données de quelques dizaines de mégaoctets à la fois, ce qui fait d'un gigaoctet un volume de données relativement important et donc coûteux.
– Dan Howdle, analyste des télécommunications grand public chez Cable.co .uk

À quel prix parlons-nous?

Le coût des données mobiles

Une étude réalisée en 2018 par cable.co.uk a révélé que le Zimbabwe était le pays le plus cher du monde les données mobiles, où 1 Go coûtent en moyenne 75,20 USD, allant de 12,50 USD à 138,46 USD. La fourchette de prix énorme est due au fait que de plus petites quantités de données sont très chères ce qui est d'autant plus avantageux que le plan de données auquel vous vous engagez est proportionnellement moins coûteux. Vous pouvez lire la méthodologie de l'étude pour plus d'informations.

Le Zimbabwe n'est en aucun cas un cas isolé. La Guinée équatoriale, Sainte-Hélène et les îles Falkland viennent ensuite, avec 1 Go de données coûtant respectivement 65,83 USD, 55,47 USD et 47,39 USD. Ces pays combinent généralement une infrastructure technique médiocre et une adoption limitée, ce qui signifie que les données sont coûteuses à fournir et n’ont pas l’économie d’échelle permettant de réduire les coûts.

Les données coûtent également cher dans certaines parties de l’Europe. Un gigaoctet de données en Grèce vous coûtera 32,71 $; en Suisse, 20,22 $. À titre de comparaison, le même montant de données coûte 6,66 USD au Royaume-Uni et 12,37 USD aux États-Unis. À l’opposé, l’Inde est l’endroit le moins cher au monde pour les données, avec un coût moyen de 0,26 dollar. Le Kirghizistan, le Kazakhstan et l'Ukraine suivent à 0,27 USD, 0,49 USD et 0,51 USD par Go respectivement.

La vitesse des réseaux de téléphonie mobile varie également considérablement d'un pays à l'autre. Il est peut-être surprenant de constater que les utilisateurs de bénéficient de vitesses plus rapides sur un réseau mobile que le Wi-Fi dans au moins 30 pays, dont l'Australie et la France. La Corée du Sud a la vitesse de téléchargement mobile la plus rapide avec une moyenne de 52,4 Mbps, mais l'Irak a la vitesse de téléchargement la plus lente, avec une moyenne de 1,6 Mbps et une moyenne de 0,7 Mbps. Les États-Unis se classent au 40ème rang mondial pour les vitesses de téléchargement mobile, à environ 34 Mbps, et risquent de prendre davantage de retard alors que le monde se dirige vers la 5G.

En ce qui concerne le type de connexion de réseau mobile, 84,7% Au Royaume-Uni, le nombre de connexions utilisateur est en 4G, contre 93% aux États-Unis et 97,5% en Corée du Sud. Cela se compare à moins de 50% en Ouzbékistan et à moins de 60% en Algérie, en Équateur, au Népal et en Irak.

Le coût des données à large bande

Parallèlement, une étude du coût du large bande en 2018 Montre qu'une connexion à large bande au Niger coûte 263 $ 'par mégabit par mois'. Cet indicateur est un peu difficile à comprendre, alors voici un exemple: si le coût moyen des forfaits haut débit dans un pays est de 22 $ et que la vitesse de téléchargement moyenne offerte par les forfaits est de 10 Mbps, le coût «par mégabit par mois» be $ 2.20.

C'est une métrique intéressante, qui reconnaît que la vitesse du haut débit est un facteur aussi important que le plafond de données. Un coût de 263 dollars suggère une combinaison de haut débit extrêmement lent et extrêmement coûteux. À titre de référence, le chiffre indiqué est de 1,19 USD au Royaume-Uni et de 1,26 USD aux États-Unis.

Ce qui est peut-être plus facile à comprendre, c’est le coût moyen d’un forfait large bande. Il convient de noter que cette étude recherchait les offres de large bande les moins chères, ignorant si ces offres avaient ou non un plafond de données, fournit donc un chiffre approximatif utile plutôt que le coût des données en tant que tel.

En ce qui concerne le coût de l'offre, la Mauritanie a la bande large la plus chère du monde, avec une moyenne de 768,16 $ (une fourchette de 307,26 $ à 1 368,72 $). Ce coût énorme inclut la construction de lignes physiques menant à la propriété, car il en existe déjà peu en Mauritanie. À 0,7 Mbps, la Mauritanie possède également l’un des réseaux haut débit les plus lents au monde.

Taïwan dispose du plus haut débit au monde à une vitesse moyenne de 85 Mbps. Le Yémen a le plus lent, à 0,38 Mbps. Mais même les pays dotés d’une infrastructure à large bande bien établie ont ce qu’on appelle des «non-spots». Le Royaume-Uni se classe au 34e rang sur 207 pays pour la vitesse du haut débit, mais en juillet 2019, il existait encore au Royaume-Uni une école sans haut débit .

Le coût moyen d'un forfait haut débit au Royaume-Uni est de 39,58 $ US. , et aux États-Unis est 67,69 $. La moyenne la moins chère dans le monde est celle de l'Ukraine, à seulement 5 dollars, bien que le large bande le moins cher ait été trouvé au Kirghizistan (1,27 dollar – contre une moyenne nationale de 108,22 dollars).

Le Zimbabwe était le pays le plus coûteux en données mobiles. les statistiques ne sont pas bien meilleures pour le haut débit, avec un coût moyen de 128,71 $ et un coût «par mégabit par mois» de 6,89 $.

Coût absolu par rapport au coût en termes réels

Tous les coûts décrits jusqu'à présent sont les coûts absolus en USD, basés sur les taux de change en vigueur au moment de l’étude. Ces coûts n’ont pas été comptabilisés dans le coût de la vie ce qui signifie que, dans de nombreux pays, le coût est en réalité bien plus élevé en termes réels.

Je vais limiter ma navigation actuelle à 50 Mo. Le Zimbabwe coûterait environ 3,67 dollars sur un tarif de données mobiles. Cela peut sembler peu, mais les enseignants du Zimbabwe étaient en grève cette année parce que leurs salaires étaient tombés à seulement 2,50 dollars par jour .

À titre de comparaison, 3,67 dollars équivaut à la moitié du salaire minimum de à 7,25 dollars US. les USA . En tant que Zimbabwéen, je devrais travailler environ un jour et demi pour gagner l’argent nécessaire pour acheter ces données de 50 Mo, contre seulement une demi-heure aux États-Unis. Il n’est pas facile de comparer le coût de la vie d’un pays à l’autre, mais pour le seul salaire, le coût de 3,67 dollars de 50 Mo de données au Zimbabwe donnerait 52 dollars à un américain au salaire minimum.

Mise en place de l’expérience

J’ai lancé Chrome et ouvrit les outils de développement, où je limitais le réseau à une connexion 3G lente. Je voulais simuler une connexion lente, comme celle des utilisateurs d’Ouzbékistan, pour voir le type d’expérience que les sites Web me procureraient. J'ai également étranglé mon processeur pour simuler le fait d'être sur un périphérique bas de gamme.

J'ai choisi d'étrangler mon réseau en Slow 3G et mon processeur en un ralentissement de 6x. ( Image agrandie )

J'ai installé ModHeader et paramétré l'en-tête "Save-Data" pour que les sites Web sachent que je souhaite réduire au minimum l'utilisation de mes données. C’est également l’en-tête défini par Chrome pour le "Mode Lite" d’Android, que je traiterai plus en détail plus tard.

J’ai téléchargé TripMode ; une application pour Mac qui vous permet de contrôler quelles applications de votre Mac peuvent accéder à Internet. L’accès Internet de toute autre application est automatiquement bloqué.

 Capture d’écran des paramètres de Tripmode; Chrome est activé, la messagerie est désactivée
Vous pouvez activer / désactiver la connexion à des applications individuelles avec Internet grâce à TripMode. J'ai activé Chrome. ( Grand aperçu )

Jusqu'où puis-je prédire que mon budget de 50 Mo me mènera? Le poids moyen d’une page Web étant d’environ 1,7 Mo cela donne à penser que j’ai environ 29 pages dans mon budget, mais probablement un peu plus que cela si je peux rester sur les mêmes sites. et mettre à profit la mise en cache du navigateur.

Tout au long de l’expérience, je vous suggérerai des astuces pour améliorer les performances de la première peinture contenant le contenu et du temps de chargement perçu. Certaines de ces astuces peuvent ne pas affecter directement la quantité de données transférées mais impliquent généralement le report du téléchargement de ressources moins importantes, ce qui signifie que, dans le cas de connexions lentes, les ressources ne sont jamais téléchargées et les données sauvegardées. [19659006] L’expérience

Sans plus tarder, j’ai chargé google.com en utilisant 402 Ko de mon budget et en dépensant 0,03 USD (environ 1% de mon budget au Zimbabwe).

 402 Ko transférés, 1,1 Mo de ressources, 24 demandes [19659041] 402 Ko transférés, 1,1 Mo de ressources, 24 demandes. (<a href= Grand aperçu )

Globalement, ce n'est pas une mauvaise taille de page, mais je me demandais d'où venaient ces 24 requêtes réseau et si la page pouvait être allégée.

Google Page d'accueil – DOM

Capture d'écran de devtools de Chrome du DOM, où j'ai développé une balise en ligne de style . ( Image agrandie )

Il n'existe pas de feuilles de style externes dans le balisage de page: toutes les feuilles de style CSS sont en ligne.

Conseil de performance n ° 1: CSS critique en ligne

This is good for performance, car il évite au navigateur de faire une requête réseau supplémentaire pour extraire une feuille de style externe, de sorte que les styles puissent être analysés et appliqués immédiatement pour la première peinture contenant du contenu. Il faut faire un compromis ici, car les feuilles de style externes peuvent être mises en cache, mais pas les en-têtes (à moins que vous ne deveniez malin avec JavaScript ).

Le conseil général est pour vos styles critiques (tout au-dessus du pli ) doit être en ligne et le reste de votre style doit être externe et chargé de manière asynchrone. Le chargement asynchrone de CSS peut être réalisé dans une ligne remarquablement intelligente de HTML :

Les outils de développement montrent une version simplifiée du DOM. Si vous voulez voir ce qui a été réellement téléchargé dans le navigateur, ouvrez l'onglet Sources et trouvez le document.

 Un mur de code minifié
Basculer vers les sources et trouver l'index affiche le code HTML 'brut' qui était livré au navigateur. Quel bordel! ( Grand aperçu )

Vous pouvez voir qu'il y a BEAUCOUP de JavaScript en ligne ici. Il est à noter qu’elle a été oubliée plutôt que simplement minifiée.

Astuce de performance n ° 2: Minify And Uglify Your Assets

La ​​minification supprime les espaces et les caractères inutiles, mais l ’uglification réduit en réalité le code. Le signe indicateur est que le code contient des noms de variables courts générés par la machine plutôt que du code source non modifié. C'est bien car cela signifie que le script est plus petit et plus rapide à télécharger.

Néanmoins, les scripts en ligne semblent représenter environ 120 Ko de la ressource de page de 210 Ko (environ la moitié de la taille compressée de 60 Ko). En outre, il y a cinq fichiers JavaScript externes représentant 291 Ko sur les 402 Ko téléchargés:

 Onglet Réseau de DevTools affichant les fichiers JavaScript externes
Cinq fichiers JavaScript externes dans l'onglet Réseau de devtools. ( Grand aperçu )

Cela signifie que JavaScript représente environ 80% du poids total de la page.

Ce n'est pas un JavaScript inutile; Google doit en avoir pour afficher des suggestions au fur et à mesure de la frappe. Mais je soupçonne qu’il s’agit en grande partie de code de suivi et de configuration de la publicité.

À titre de comparaison, j’ai désactivé JavaScript et rechargé la page:

 DevTools n’affichant que 5 requêtes réseau
La version JS désactivée de la recherche Google n’était que 102 KB et avait seulement 5 demandes de réseau. ( Grand aperçu )

La version de la recherche Google désactivée pour le JS ne fait que 102 Ko, contre 402 Ko. Bien que Google ne puisse pas fournir de suggestion automatique dans ces conditions, le site est toujours fonctionnel et je viens de réduire mon utilisation des données à un quart de ce qu’elle était. Si j’étais vraiment obligé de limiter l’utilisation de mes données à long terme, l’une des premières choses que je ferais est de désactiver JavaScript. Ce n'est pas aussi grave que cela puisse paraître .

Conseil de performance n ° 3: Less Is More

Inlining, uglifying and minifying assets est bien beau, mais la meilleure performance provient de ne pas envoyer le Les actifs en premier lieu

  • Avant d'ajouter de nouvelles fonctionnalités, disposez-vous d'un budget de performances ?
  • Avant d'ajouter du code JavaScript à votre site, votre fonctionnalité peut-elle être réalisée en langage HTML simplifié? (Par exemple, validation de formulaire HTML5 .)
  • Avant d'extraire une grande bibliothèque JavaScript ou CSS dans votre application, utilisez quelque chose comme bundlephobia.com pour mesurer sa taille. La commodité vaut-elle le poids? Pouvez-vous faire la même chose en utilisant du code vanille avec une taille de données beaucoup plus petite?

Analyse de l’information sur les ressources

Il ya beaucoup à faire pour décompresser ici, alors commençons à craquer. Je n’ai que 50 Mo pour jouer, je vais donc tirer le maximum de chaque page de cette page. Installez-vous pour un bref tutoriel sur Chrome Devtools.

402 Ko transférés, mais 1,1 Mo de ressources: qu'est-ce que cela signifie réellement?

Cela signifie que 402 Ko de contenu ont été réellement téléchargés, mais sous sa forme compressée (à l'aide d'une compression). algorithme tel que gzip ou brotli ). Le navigateur devait alors faire quelques efforts pour le décompresser en quelque chose de significatif. La taille totale des données non compressées est de 1,1 Mo.

Ce décompactage n’est pas gratuit – il ya quelques millisecondes de temps système pour la décompression des ressources . Toutefois, il s’agit là d’un surcoût négligeable par rapport à l’envoi de 1,1 Mo.

Conseil de performance n ° 4: Compression des ressources à base de texte

En règle générale, compressez toujours vos ressources à l’aide de gzip. Mais n'utilisez pas la compression sur vos images et autres fichiers binaires – vous devez les optimiser au préalable à la source. La compression pourrait en fait finir par les agrandir .

Et, si vous le pouvez, évitez de compresser des fichiers de 1500 octets ou moins . La plus petite taille de paquet TCP est de 1500 octets. Ainsi, en compressant, par exemple, 800 octets, vous ne sauvegardez rien, car il est toujours transmis dans le même paquet d’octets. Là encore, le coût est négligeable, mais entraîne une perte de temps de compression sur le serveur et de décompression sur le client.

Maintenant, revenez à l’onglet Réseau de Chrome: passons à ces priorités. Notez que les ressources sont prioritaires entre «priorité la plus élevée» et «priorité la plus basse» – c’est la meilleure estimation du navigateur en ce qui concerne les ressources les plus importantes à télécharger. Plus la priorité est élevée, plus le navigateur essaiera de télécharger rapidement l'actif.

Conseil de performance n ° 5: donner des astuces sur les ressources au navigateur

Le navigateur va deviner quelles sont les ressources les plus prioritaires, mais vous pouvez fournit un indice de ressource à l'aide de la balise invitant le navigateur à télécharger l'actif le plus rapidement possible. C’est une bonne idée de précharger les polices, les logos et tout ce qui se trouve au-dessus du pli.

Parlons de la mise en cache. Je vais maintenir ALT et cliquer avec le bouton droit de la souris pour changer les en-têtes de colonne afin de déverrouiller des informations plus juteuses. Nous allons vérifier Cache-Control.

 Capture d’écran montrant comment afficher les informations de contrôle du cache
Il existe de nombreux champs intéressants cachés derrière ALT. ( Grand aperçu )

Cache-Control indique si une ressource peut ou non être mise en cache, combien de temps elle peut être mise en cache et quelles règles elle devrait suivre autour de revalidant . Il est essentiel de définir des valeurs de cache appropriées pour limiter le coût des données des visites répétées.

Conseil de performance n ° 6: Définition des en-têtes de contrôle du cache sur tous les actifs pouvant être mis en cache

Notez que la valeur de contrôle du cache commence par une directive de . ] public ou private suivi d'une valeur d'expiration (par exemple, max-age = 31536000 ). Que signifie la directive et pourquoi la valeur max-age étrangement spécifique?

 Capture d'écran de l'onglet Réseau Google avec colonne de contrôle du cache visible
Un mélange de valeurs max et de paramètres public / privé . ( Grand aperçu )

La valeur 31536000 est le nombre de secondes qu'il y a dans une année et correspond à la valeur maximale théorique autorisée par la spécification de contrôle de cache. Il est courant de voir cette valeur appliquée à tous les actifs statiques et signifie en réalité que «cette ressource ne va pas changer». En pratique, aucun navigateur ne va mettre en cache pendant une année complète mais il mettra en cache l’actif aussi longtemps que cela aura du sens.

Pour expliquer la directive public / privé, nous devons expliquer les deux éléments principaux. les caches qui existent hors du serveur. Tout d’abord, il ya le cache du navigateur traditionnel, où la ressource est stockée sur la machine de l’utilisateur (le «client»). Et puis il y a le cache CDN, qui se trouve entre le client et le serveur; les ressources sont mises en cache au niveau du CDN pour empêcher le CDN de demander la ressource au serveur d'origine à plusieurs reprises

 Diagramme illustrant la manière dont les caches interagissent avec le serveur
Source . ( Grand aperçu )

Une directive Cache-Control de public permet à la ressource d'être mise en cache dans le client et le CDN. Une valeur de private signifie que seul le client peut la mettre en cache. le CDN n'est pas censé le faire. Cette dernière valeur est généralement utilisée pour les pages ou les ressources existant derrière l'authentification, où il est préférable d'être mises en cache sur le client, mais nous ne souhaitons pas divulguer d'informations privées en les mettant en cache dans le CDN et en les transmettant à d'autres utilisateurs. [19659094] Capture d'écran du paramètre de contrôle du cache du logo Google: private, max-age = 31536000 « />

Mélange de valeurs max-age et public / privé. ( Grand aperçu )

Une des choses qui a attiré mon attention est que le logo de Google a un contrôle de cache de "privé". Les autres images de la page ont une mémoire cache publique et je ne sais pas pourquoi le logo serait traité différemment. Si vous avez des idées, faites-le moi savoir dans les commentaires!

J'ai rafraîchi la page et la plupart des ressources ont été servies à partir de la mémoire cache, à l'exception de la page elle-même, qui, comme vous l'avez déjà vu, est private, max -age = 0 ce qui signifie qu'il ne peut pas être mis en cache. Ceci est normal pour les pages Web dynamiques où il est important que l'utilisateur obtienne toujours la page la plus récente lors de l'actualisation.

C'est à ce moment-là que j'ai cliqué accidentellement sur l'URL 'Explication' des outils de développement, ce qui m'a amené à référence d'analyse de réseau me coûtant environ 5 Mo de mon budget. Oops.

Google Dev Docs

4,2 Mo de cette nouvelle page de 5 Mo étaient réduites à des images; spécifiquement SVG. Le plus lourd de ces fichiers était de 186 Ko, ce qui n’est pas particulièrement volumineux – il y en avait tellement, et ils ont tous été téléchargés en même temps.

 Gif fait défiler la très longue page de développement
Ceci est une très longue page. . Toutes les images téléchargées lors du chargement de la page. ( Grand aperçu )

Ce chargement de pages de 5 Mo représentait 10% de mon budget actuel. Jusqu'ici, j'ai utilisé 5,5 Mo, y compris le rechargement sans JavaScript de la page d'accueil de Google, et dépensé 0,40 USD. Je n'avais même pas l'intention d'ouvrir cette page.

Conseil de performance n ° 7: chargez paresseusement vos images

D'habitude, si je cliquais accidentellement sur un lien, Je voudrais appuyer sur le bouton de retour dans mon navigateur. Le téléchargement de ces images ne m'apporterait aucun avantage: quel gaspillage de 4,2 Mo!

Hormis la vidéo, où vous savez généralement dans quoi vous vous entraînez, les images sont de loin le principal responsable de l'utilisation des données sur la toile. Une étude des 500 meilleurs sites Web au monde a révélé que les images représentent jusqu'à 53% du poids moyen des pages. "Cela signifie qu'ils ont un impact important sur les temps de chargement des pages et par conséquent sur les performances globales."

Au lieu de télécharger toutes les images lors du chargement de la page, il est recommandé de charger les images paresseux de manière à ce que seuls les utilisateurs avec la page payer le coût de les télécharger. Les utilisateurs qui choisissent de ne pas défiler sous le pli ne gaspillent donc pas de bande passante inutile en téléchargeant des images qu'ils ne verront jamais.

Il existe un excellent guide css-tricks.com pour déployer le chargement paresseux d'images . ] Qui offre un bon équilibre entre ceux sur les bonnes connexions, ceux sur les mauvaises connexions et ceux avec JavaScript désactivé.

Si cette page avait implémenté le chargement différé comme indiqué dans le guide ci-dessus, chacun des 38 SVG aurait été représenté par un Image d'espace réservé de 1 Ko par défaut, et chargée uniquement dans la vue sur le défilement.

Conseil de performance n ° 8: Utiliser le bon format pour vos images

Je pensais que Google avait manqué un tour en n'utilisant pas WebP qui est un format d'image 26% plus petit que les PNG (sans perte de qualité) et 25 à 34% plus petit que les JPEG (et de qualité comparable). Je pensais pouvoir convertir SVG en WebP.

La conversion en WebP a fait passer l'un des SVG de 186 Ko à seulement 65 Ko, mais en réalité, en regardant les images côte à côte, le WebP est sorti. grainy:

 Comparaison des deux images
Le SVG (à gauche) est nettement plus net que le WebP (à droite). ( Image agrandie )

J'ai ensuite essayé de convertir l'un des fichiers PNG en WebP, censé être sans perte et devrait être plus petit. Cependant, la sortie WebP était * plus lourde * (127 Ko, à partir de 109 Ko)!

 Comparaison des deux images
Le format PNG (à gauche) présente une qualité similaire à celle du WebP (à droite) mais est inférieur à 109 Ko. comparé à 127 Ko. ( Grand aperçu )

Cela m'a surpris. WebP n'est pas nécessairement la solution miracle que nous pensons, et même Google a négligé de l'utiliser sur cette page.

Mon conseil serait donc: dans la mesure du possible, essayez différents formats d'image, image par image. Le format qui conserve la meilleure qualité pour la plus petite taille n'est peut-être pas celui que vous attendez.

Revenons maintenant au DOM. Je suis tombé sur ceci:

 Capture d'écran du code
( Grand aperçu )

Notez le mot clé async du script d'analyse de Google?

 Capture d'écran de l'analyse de performance sortie de devtools
La priorité de Google Analytics est "faible". ( Grand aperçu )

Bien qu’il s’agisse d’une des premières choses à la tête du document, cette priorité n’a pas la priorité, car nous avons explicitement choisi de ne pas être une demande de blocage en utilisant le mot clé async .

Une demande de blocage en est une qui arrête le rendu de la page. Un appel bloque par défaut, arrêtant l'analyse du code HTML jusqu'à ce que le script soit téléchargé, compilé et exécuté. C'est pourquoi nous avons traditionnellement placé des appels à la fin du document.

Conseil de performance n ° 9: Évitez d'écrire des appels de script de blocage

En ajoutant l'attribut async à notre balise , nous demandons au navigateur de ne pas arrêter le rendu de la page mais de télécharger le script en arrière-plan. Si le code HTML est toujours en cours d'analyse au moment du téléchargement du script, celui-ci est suspendu pendant l'exécution du script, puis repris. C'est nettement mieux que de bloquer le rendu dès que l'on rencontre .

Il existe également un attribut defer qui est légèrement différent. indique au navigateur de rendre la page pendant le chargement du script en arrière-plan, et même si le code HTML est toujours en cours d'analyse au moment du téléchargement du script, il doit attendre que la page soit rendue avant de pouvoir être exécutée. Cela rend le script complètement non bloquant. Lisez « Chargez efficacement du JavaScript avec différé et asynchrone » pour plus d'informations. En tout cas, suffisamment de dissection dans Google. Il est temps d’essayer un autre site. Il me reste encore près de 45 Mo de mon budget!

Amazon

 capture d'écran de la page d'accueil Amazon
( Grand aperçu )
La page d'accueil Amazon chargée d'un poids total d'environ 6 Mo. L’une d’elles était une image de 587 Ko que je ne pouvais même pas trouver sur la page. Il s’agit d’un fichier PNG, dont le texte doit être clair, mais sur un fond photographique - une combinaison classique qui fait très mal à la performance.
 image de clés avec texte superposé: Temps de parole. Découvrez notre sélection d’outils pour votre voiture
Cette image granuleuse a utilisé plus de 1% de mon budget. ( Grand aperçu )
En fait, il y avait quelques images de plusieurs centaines de kilo-octets dans l'onglet Réseau que je ne pouvais pas réellement voir sur la page. Je soupçonne une mauvaise configuration quelque part sur Amazon, mais ces images invisibles combinées ont miné au moins 1 Mo de mes données. Qu'en est-il de l'image du héros? Il s’agit de l’image principale de la page et de seulement 94 Ko transférés - mais sa taille pourrait être réduite d’environ 15% si elle était coupée directement autour du texte et des footballeurs. Nous pourrions alors appliquer la même couleur d’arrière-plan dans CSS que dans l’image. Cela présente l’avantage supplémentaire d’être redimensionnable sur de plus petits écrans tout en conservant la lisibilité du texte.
 Une capture d’écran dit: Football de la Premier League - En direct sur la vidéo Prime
( Grand aperçu )
I ' Je l'ai déjà dit une fois, et je le répète: L'optimisation et le chargement paresseux de vos images est le principal avantage que vous pouvez apporter au poids de page de votre site .
L'optimisation des images fournies par, par loin, la réduction de données la plus significative. Vous pouvez faire valoir le cas que JavaScript est un plus gros problème pour les performances globales, mais pas pour la réduction des données. Optimiser ou supprimer des images est le moyen le plus sûr d’assurer une expérience beaucoup plus légère, et c’est la principale optimisation sur laquelle Data Saver se base. - Tim Kadlec, Donner un sens aux pages chromées Lite
Pour être juste envers Amazon, si Je redimensionne le navigateur à une taille mobile et actualise la page, le site est optimisé pour les mobiles et le poids total de la page n'est que de 2,1 Mo.
 101 demandes, 2,1 Mo transférées
101 demandes, 2,1 Mo transférées. ( Image agrandie )
Mais ceci m'amène au point suivant…
Conseil de performance n ° 10: ne faites pas d'hypothèses sur les connexions de données
Il est difficile de détecter si quelqu'un se trouve sur un ordinateur de bureau est connecté sur une connexion haut débit ou est connecté via un dongle ou un mobile limité en données. Beaucoup de gens travaillent dans le train comme ça ou vivent dans une région où l'infrastructure haut débit est médiocre mais où le signal mobile est puissant. Dans le cas d'Amazon, il est possible de faire de grosses économies de données sur le site de bureau et nous ne devrions pas faire preuve de négligence simplement parce que la taille de l'écran laisse penser que je ne suis pas sur un appareil mobile. Oui, nous devrions nous attendre à une page plus grande. charger si notre fenêtre d'affichage est de la "taille du bureau", car les images seront plus grandes et mieux optimisées pour l'écran que celles mobiles. Mais la page ne devrait pas être beaucoup plus grande. De plus, j’envoyais l’en-tête Save-Data avec ma demande. Cet en-tête indique explicitement une préférence pour une utilisation réduite des données et j'espère que de plus en plus de sites Web commenceront à en tenir compte à l'avenir. La charge initiale de «bureau» peut avoir été de 6 Mo, mais après s'être reposée et le visionnant pendant une minute, il atteignait 8,6 Mo alors que les ressources moins prioritaires et le suivi des événements entraient en action. Le poids de cette page comprend près de 1,7 Mo de JavaScript minifié. Je ne veux même pas commencer à regarder .
Conseil de performance n ° 11: Utiliser des travailleurs Web pour votre JavaScript
Ce qui serait pire - 1,7 Mo de JavaScript ou 1,7 Mo d'images ? La réponse est JavaScript: les deux ressources ne sont pas équivalentes en termes de performances.
Une image JPEG doit être décodée, pixellisée et peinte à l'écran. Un ensemble JavaScript doit être téléchargé, puis analysé, compilé, exécuté. Un moteur doit effectuer un certain nombre d'autres étapes. Sachez que ces coûts ne sont pas tout à fait équivalents. - Addy Osmani, Le coût de JavaScript en 2018
Si vous devez expédier autant de JavaScript, essayez de le mettre dans un employé Web. . Cela évite la majeure partie de JavaScript au thread principal, qui est maintenant libéré pour pouvoir repeindre l'interface utilisateur, ce qui permet à votre page Web de rester réactive sur les périphériques de faible puissance. Mon budget représente maintenant environ 15,5 Mo. dépensé 1,14 $ de mon budget de données du Zimbabwe. J'aurais dû travailler une demi-journée en tant qu'enseignant pour gagner l'argent nécessaire pour aller aussi loin.

Pinterest

J'ai entendu de bonnes choses sur les performances de Pinterest, alors j'ai décidé de les mettre à l'épreuve. .
 Un nombre impressionnant de 327 demandes, soit 6,1 Mo de données.
Un nombre impressionnant de 327 demandes, soit 6,1 Mo de données. ( Grand aperçu )
Ce n’est peut-être pas le plus juste des tests; J'ai été dirigé vers la page de connexion, sur laquelle un processus asynchrone a découvert que j'étais connecté à Facebook et me connectait automatiquement. La page a été chargée assez rapidement, mais les demandes ont augmenté au fur et à mesure que de plus en plus de contenu était préchargé. Cependant, j'ai constaté que lors des chargements de page ultérieurs, le technicien de maintenance recouvrait une grande partie du contenu, économisant ainsi environ la moitié du poids de la page: [19659171] 8.2 / 15.6 Mo de ressources et 39/180 requêtes traitées par le cache du prestataire de services. "/>
8.2 / 15.6 Mo de ressources et 39/180 requêtes traitées par le cache du prestataire de services. ( Grand aperçu )
Le site Pinterest est une application Web progressive. il a installé un agent de service pour gérer manuellement la mise en cache de CSS et de JS. Je pourrais maintenant éteindre mon WiFi et continuer à utiliser le site (bien que ce ne soit pas très utile):
 Chargement du spinner et du message disant: vous n'êtes pas connecté à Internet
Vous ne pouvez pas faire grand chose quand vous êtes hors ligne. (Large preview)
Performance Tip #12: Use Service Workers To Provide Offline Support
Wouldn’t it be great if I only had to load a website once over network, and now get all the information I need even if I’m offline? A great example would be a website that shows the weather forecast for the week. I should only need to download that page once. If I turn off my mobile data and subsequently go back to the page at some point, it should be able to serve the last known content to me. If I connect to the internet again and load the page, I would get a more up to date forecast, but static assets such as CSS and images should still be served locally from the service worker. This is possible by setting up a service worker with a good caching strategy so that cached pages can be re-accessed offline. The lodash documentation website is a nice example of a service worker in the wild:
Screenshot of devtools showing 'ServiceWorker' next to each request
The Lodash docs work offline. (Large preview)
Content that rarely updates and is likely to be used quite regularly is a perfect candidate for service worker treatment. Dynamic sites with ever-changing news feeds aren’t quite so well suited for offline experiences, but can still benefit.
Screenshot of Chris Ashton profile on Pinterest
The second Pinterest page load was 443 KB. (Large preview)
Service workers can truly save the day when you’re on a tight data budget. I’m not convinced the Pinterest experience was the most optimal in terms of data usage – subsequent pages were around the 0.5 MB mark even on pages with few images — but letting your JavaScript handle page requests for you and keeping the same navigational elements in place can be very performant. The BBC manages a transfer size of just 3.1 KB for return-visits to articles that are renderable via the single page application. So far, Pinterest alone has chewed through 14 MB, which means I’ve blown around 30 MB of my budget, or $2.20 (almost a day’s wages) of my Zimbabwe budget. I’d better be careful with my final 20 MB… but where’s the fun in that?

Gamespot

I picked this one because it felt noticeably sluggish on my mobile in the past and I wanted to dig into the reasons why. Sure enough, loading the homepage consumes 8.5 MB of data.
Screenshot of devtools alongside homepage
The Gamespot homepage trickled up to 8.5 MB, and a whopping 347 requests. (Large preview)
6.5 MB of this was down to an autoplaying video halfway down the page, which — to be fair — didn’t appear to download until I began scrolling. Nevertheless…
Gif screenshot of the video within my viewport
The video is clipped off-screen. (Large preview)
I could only see half the video in my viewport — the right hand side was clipped. It was also 30 seconds long, and I would wager that most people won’t sit and watch the whole thing. This single asset more than tripled the size of the page.
Performance Tip #13: Don’t Preload Video
As a rule, unless your site’s primary mode of communication is video, don’t preload it. If you’re YouTube or Netflix, it’s reasonable to assume that someone coming to your page will want the video to auto-load and auto-play. There is an expectation that the video will chew through some data, but that it’s a fair exchange for the content. But if you’re a site whose primary medium is text and image — and you just happen to offer additional video content — then don’t preload the video. Think of news articles with embedded videos. Many users only want to skim the article headline before moving on to their next thing. Others will read the article but ignore any embeds. And others will diligently click and watch each embedded video. We shouldn’t hog the bandwidth of every user on the assumption that they’re going to want to watch these videos. To reiterate: users don’t like autoplaying video. As developers we only do it because our managers tell us to, and they only tell us to do it because all the coolest apps are doing it, and the coolest apps are only doing it because video ads generate 20 to 50 times more revenue than traditional ads. Google Chrome has started blocking autoplay videos for some sitesbased on personal preferences, so even if you develop your site to autoplay video, there’s no guarantee that’s the experience your users are getting. If we agree that it’s a good idea to make video an opt-in experience (click to play), we can take it a step further and make it click to load too. That means mocking a video placeholder image with a play button over it, and only downloading the video when you click the play button. People on fast connections should notice no difference in buffer speed, and people on slow connections will appreciate how fast the rest of your site loaded because it didn’t have to preload a large video file. Anyway, back to Gamespot, where I was indeed forced to preload a large video file I ended up not watching. I then clicked through to a game review page that weighed another 8.5 MB, this time with 5.4 MB of video, before I even started scrolling down the page. What was really galling was when I looked at what the video actually was. It was an advert for a Samsung TV! This advert cost me $0.40 of my Zimbabwe wages. Not only was it pre-loaded, but it also didn’t end up playing anywhere as far as I’m aware, so I never actually saw it.
Screenshot of the offending request
This advert wasted 5.4 MB of my precious data. (Large preview)
The ‘real’ video — the gameplay footage (in other words, the content) — wasn’t actually loaded until I clicked on it. And that ploughed through my remaining data in seconds. That’s it. That’s my 50 MB gone. I’ll need to work another 1.5 days as a Zimbabwean schoolteacher to repeat the experience.
Performance Tip #14: Optimize For First Page Load
What’s striking is that I used 50 MB of data and in most cases, I only visited one or two pages on any given site. If you think about it, this is true of most user journeys today. Think about the last time you Googled something. You no doubt clicked on the first search result. If you got your answer, you closed the tab, or else you hit the back button and moved onto the next search result. With the exception of a few so-called ‘destination sites’ such as Facebook or YouTube, where users habitually go as a starting point for other activities, the majority of user journeys are ephemeral. We stumble across random sites to get the answers to our questions, never to return to those sites again. Web development practices are heavily skewed towards optimising for repeat visitors. “Cache these assets — they’ll come in handy later”. “Pre-load this onward journey, in case the user clicks to read more”. “Subscribe to our mailing list”. Instead, I believe we should optimize heavily for one-off visitors. Call it a controversial opinion, but maybe caching isn’t really all that important. How important can a cached resource that never gets surfaced again be? And perhaps users aren’t actually going to subscribe to your mailing list after reading just the one article, so downloading the JavaScript and CSS for the mail subscription modal is both a waste of data and an annoying user experience.

The Decline Of Proxy Browsers

I had hoped to try out Opera Mini as part of this experiment. Opera Mini is a mobile web browser which proxies web pages through Opera’s compression servers. It accounts for 1.42% of global traffic as of June 2019, according to caniuse.com. Opera Mini claims to save up to 90% of data by doing some pretty intensive transcoding. HTML is parsed, images are compressed, styling is applied, and a certain amount of JavaScript is executed on Opera’s servers. The server doesn’t respond with HTML as you might expect — it actually transcodes the data into Opera Binary Markup Language (OBML), which is progressively loaded by Opera Mini on the device. It renders what is essentially an interactive ‘snapshot’ of the web page — think of it as a PDF with hyperlinks inside it. Read Tiffany Brown’s excellent article, “Opera Mini and JavaScript” for a technical deep-dive. It would have been a perfect way to eek my 50 MB budget as far as possible. Unfortunately, Opera Mini is no longer available on iOS in the UK. Attempting to visit it in the app store throws an error:
The item you've requested is not currently available in the UK Store.
(Large preview)
It’s still available “in some markets” but reading between the lines, Opera will be phasing out Opera Mini for its new app — Opera Touch — which doesn’t have any data-saving functionality apart from the ability to natively block ads. Opera desktop used to have a ‘Turbo mode’, acting as a traditional proxy server (returning a HTML document instead of OBML), applying data-saving techniques but less intensively than Opera Mini. According to Opera, JavaScript continues to work and “you get all the videos, photos and text that you normally would, but you eat up less data and load pages faster”. However, Opera quietly removed Turbo mode in v60 earlier this year, and Opera Touch doesn’t have a Turbo mode either. Turbo mode is currently only available on Opera for Android. Android is where all the action is in terms of data-saving technology. Chrome offers a ‘Lite mode’ on its mobile browser for Android, which is not available for iPhones or iPads because of “platform constraints“. Outside of mobile, Google used to provide a ‘Data Saver’ extension for Chrome desktop, but this was canned in April. Lite mode for Chrome Android can be forcibly enabled, or automatically kicks in when the network’s effective connection type is 2G or worse, or when Chrome estimates the page will take more than 5 seconds to reach first contentful paint. Under these conditions, Chrome will request the lite version of the HTTPS URL as cached by Google’s serversand display this stripped-down version inside the user’s browser, alongside a “Lite” marker in the address bar.
Screenshot showing button in toolbar denoting 'Lite' mode
‘Lite mode’ on Chrome for Android. Image: Google. (Large preview)
I’d love to try it out — apparently it disables scriptsreplaces images with placeholdersprevents loading of non-critical resources and shows offline copies of pages if one is available on the device. This saves up to 60% of data. However, it isn’t available in private (Incognito) modewhich hints at some of the privacy concerns surrounding proxy browsers. Lite mode shares the HTTPS URL with Google, therefore it makes sense that this mode isn’t available in Incognito. However other information such as cookies, login information, and personalised page content is not shared with Google — according to ghacks.net — and “never breaks secure connections between Chrome and a website”. One wonders why seemingly none of these data-saving services are allowed on iOS (and there is no news as to whether Lite mode will ever become available on iOS). Data saver proxies require a great deal of trust; your browsing activity, cookies and other sensitive information are entrusted to some server, often in another country. Many proxies simply won’t work anymore because a lot of sites have moved to HTTPS, meaning initiatives such as Turbo mode have become a largely “useless feature“. HTTPS prevents this kind of man-in-the-middle behaviour, which is a good thing, although it has meant the demise of some of these proxy services and has made sites less accessible to those on poor connections. I was unable to find any OSX or iOS compatible data-saving tool except for Bandwidth Hero for Firefox (which requires setting up your own data compression service — far beyond the technical capabilities of most users!) and skyZIP Proxy (which, last updated in 2017 and riddled with typos, I just couldn’t bring myself to trust).

Conclusion

Reducing the data footprint of your website goes hand in hand with improving frontend performance. It is the single most reliable thing you can do to speed up your site. In addition to the cost of data, there are lots of good reasons to focus on performance, as described in a GOV.UK blog post on the subject:
  • 53% of users will abandon a mobile site if it takes more than 3 seconds to load.
  • People have to concentrate 50% more when trying to complete a simple task on a website using a slow connection.
  • More performant web pages are better for the battery life of the user’s device, and typically require less power on the server to deliver. A performant site is good for the environment.
We don’t have the power to change the global cost of data inequality. But we do have the power to lessen its impact, improving the experience for everyone in the process.
Smashing Editorial(yk,ra)





Source link