Quelles sont les performances des applications Web?

image

Certaines applications se chargent rapidement, d'autres lentement, mais Ă  cause de ce qui se passe? La vitesse de chargement des pages est-elle la seule mesure des performances des applications?

Il serait trÚs difficile de répondre à ces questions et à bien d'autres dans un seul article. J'ai donc constitué un catalogue de liens et je l'ai divisé en catégories. Mais pour commencer - un peu de théorie sur ce qu'est la performance et quand y penser.

Lorsque des problĂšmes de performances surviennent


Vous pouvez développer des applications Web pendant des années et n'avoir pratiquement aucun problÚme avec les performances des applications.

Mais, trĂšs probablement, des problĂšmes surviennent dans les situations suivantes:

  1. Des données volumineuses apparaissent (vous devez afficher de grandes listes ou des centaines de milliers de points sur la carte).
  2. L'application devient volumineuse (des centaines de scénarios utilisateur, des dizaines d'écrans, de formulaires, etc.).
  3. Un grand nombre de clients de différentes régions (par exemple, plus de 300 000 clients par jour du monde entier).
  4. Concurrence élevée sur le marché (à coup sûr, l'utilisateur préférera l'application de votre concurrent si elle fonctionne plus rapidement).
  5. Une version mobile est nécessaire (les navigateurs sur les appareils mobiles souffrent toujours de problÚmes de performances).

En quoi consiste la performance


Globalement, les problĂšmes de performances des applications Web peuvent ĂȘtre divisĂ©s en deux catĂ©gories: le transfert de donnĂ©es et l'exĂ©cution.

  • Le transfert de donnĂ©es signifie le tĂ©lĂ©chargement de toutes les ressources nĂ©cessaires au fonctionnement de l'application.
  • En cours d'exĂ©cution - fonctionnement de l'application, rendu et traitement des entrĂ©es utilisateur.

Chacune de ces catégories contient de nombreuses nuances auxquelles nous ne pensons souvent pas, mais qui distinguent les applications de haute qualité des applications de faible qualité.

Voici les mesures de performances des applications Web les plus populaires (toutes devraient ĂȘtre minimales):

Chargement de la page



Durée


  • Temps de rĂ©ponse d'entrĂ©e utilisateur.
  • Interface redessiner le temps.

Bien que TTFB et TTI soient tous deux des métriques pour les performances de chargement des pages, des problÚmes liés à l'exécution peuvent également les affecter.

Comment rechercher et analyser les problĂšmes de performances


La boßte à outils principale de l'arsenal du développeur est Chrome DevTools ou des outils similaires, tels que les outils de développement Firebug / Firefox .
Des articles sĂ©parĂ©s peuvent ĂȘtre Ă©crits Ă  leur sujet, mais nous nous limiterons aux points les plus importants.

Réseau - vous permet d'analyser en détail quelles ressources sont chargées sur la page, à partir de quelles ressources, avec quelle vitesse et ainsi de suite. Cet outil est souvent utilisé pour analyser manuellement la vitesse de chargement des pages.

Performances - dans cet onglet, vous pouvez activer l'enregistrement des appels d'exĂ©cution de code, les opĂ©rations d'entrĂ©e / sortie et autres. De plus, l'enregistrement peut ĂȘtre effectuĂ© avec l'Ă©mulation du rĂ©seau de limitation et du processeur. Par exemple, vĂ©rifiez l'application sur les appareils faibles.

Phare - Un outil intĂ©grĂ© Ă  Chrome DevTools qui dĂ©marre le chargement des pages, enregistre les mĂ©triques, les analyse et donne mĂȘme des recommandations pour amĂ©liorer les performances.

Comment mesurer / surveiller les performances


Les outils de surveillance des performances des applications Web peuvent ĂȘtre divisĂ©s en deux catĂ©gories: ceux qui prennent des mesures synthĂ©tiques et ceux qui enregistrent les donnĂ©es de performances d'utilisateurs rĂ©els.


De plus, il existe des outils comme Webpack-bundle-analyzer qui ne peuvent pas ĂȘtre affectĂ©s Ă  ces deux catĂ©gories. Mais avec leur aide, vous pouvez mesurer certains paramĂštres qui affectent les performances, tels que la taille du bundle.

Transfert de données


Connexion TCP, recherche DNS - vous pouvez accĂ©lĂ©rer le chargement des pages mĂȘme en raison de la configuration correcte des connexions au serveur. En particulier, si vous utilisez la prĂ©lecture DNS ou mĂȘme des adresses IP au lieu des noms de domaine.

TTFB (Time to First Byte) . Le temps pour obtenir le premier octet est une métrique importante. Pour l'accélérer, vous devez essayer d'implémenter le moins de logique possible sur le serveur avant d'émettre index.html.

HTTP1 vs HTTP2 - HTTP2 peut accĂ©lĂ©rer considĂ©rablement le chargement des pages en multiplexant ou en compressant les en-tĂȘtes. En outre, un nouveau protocole (relativement) ouvre un tas de fonctionnalitĂ©s, telles que la poussĂ©e du serveur.

Partage de domaine. Si vous devez envoyer un grand nombre d'en-tĂȘtes HTTP pour les demandes d'API, mais pas pour les demandes statiques, il est prĂ©fĂ©rable de les sĂ©parer en diffĂ©rents domaines.

CDN (réseau de diffusion de contenu) permettra d'accélérer le chargement pour les clients géographiquement distribués.

La priorisation des ressources (préchargement, prélecture, préconnexion) est l'accélération du chargement des pages en raison de la bonne stratégie de chargement des ressources. Les navigateurs vous permettent de définir des priorités pour différents types de ressources et de télécharger plus tÎt ce qui est important pour le premier rendu.

Compression statique: GZIP et Brotli . Brotli est un algorithme de compression qui réduira le poids statique et, par conséquent, augmentera la vitesse de téléchargement. Et voici une excellente solution de mon collÚgue.

Webp vs Png & Jpg. Webp est une excellente alternative Ă  Png. En plus du faible poids des images, Webp n'est pas de qualitĂ© infĂ©rieure. Maintenant, ce format prend en charge environ 78% des navigateurs . Mais mĂȘme si vous avez besoin d'un support Ă  100%, vous pouvez implĂ©menter le repli sur Png en utilisant le tag d' image .

Durée


Tùches, microtùches . En priorisant correctement l'exécution du code, vous pouvez vous débarrasser des frises et accélérer la réponse aux entrées de l'utilisateur.

requestIdleCallback est une fonction utile qui vous permet d'exĂ©cuter du code pendant votre temps libre Ă  la fin du cadre (cadre / tick) ou lorsque l'utilisateur est inactif. Cela aidera Ă  se dĂ©barrasser de tous les mĂȘmes retards et "gels".

requestAnimationFrame vous permet de planifier correctement l'animation et de maximiser les chances de rendre 60 images par seconde.

ES2015 vs ES5 . ES2015 offre de nombreuses fonctionnalités plus productives que ES5.

Manipulation Dom. Les manipulations avec le DOM coĂ»tent cher, vous devez les effectuer avec soin et de maniĂšre significative. Par exemple, n'appelez pas querySelector () dans une boucle si cela peut ĂȘtre fait avec un seul appel.

Rendre la ressource de blocage . Le chargement de certaines ressources peut bloquer le rendu. Pour Ă©viter cela, vous devez utiliser les attributs defer, async, preload.

60 FPS par pointeur-événements: aucun n'est un excellent hack avec lequel vous pouvez atteindre 60 FPS en faisant défiler la page. Cela fonctionne trÚs simplement: tous les gestionnaires d'événements de souris sont désactivés pendant le défilement.

Écouteur d'Ă©vĂ©nement passif- un moyen de faire dĂ©filer la page en douceur sur les Ă©crans tactiles. En bref, le navigateur a un traitement de flux imparfait pour les auditeurs d'Ă©vĂ©nements tactiles. Si vous dĂ©finissez le paramĂštre passif lors de la crĂ©ation du gestionnaire d'Ă©vĂ©nements, le navigateur comprendra clairement que le gestionnaire n'annulera pas le dĂ©filement et le rendu, sans attendre qu'il se termine.

Le défilement virtuel est un moyen intelligent de ne pas afficher de grandes listes, mais de les générer lors du défilement. Vous permet de consommer moins de mémoire et de faciliter les listes de défilement.

Évitez les mises en page complexes de grande taille et la suppression de mise en page . La mise en page / refusion est une opĂ©ration coĂ»teuse qui effectue de nombreux recalculs des paramĂštres de rendu. Pour Ă©viter leurs appels frĂ©quents, vous devez crĂ©er correctement la disposition et manipuler le DOM.

Ce qui force la mise en page / refusion - une feuille de triche oĂč vous pouvez trouver une liste de fonctions et de paramĂštres qui fonctionnent avec qui provoque la mise en page / refusion.

Assemblée


Tree shaking - supprimez le code inutilisé du bundle et accélérez le chargement des pages.

Fractionnement de code - en divisant le code en morceaux, vous pouvez optimiser le premier chargement et ouvrir la possibilité de télécharger des parties du code «paresseusement».

L'obfuscation peut rĂ©duire la taille du paquet et mĂȘme aider un peu Ă  cacher votre code aux regards indiscrets.

Architecture


Le rendu cÎté serveur est probablement le moyen le plus connu pour effectuer un rendu SPA immédiatement au premier démarrage. Il s'agit d'une exigence importante pour certains moteurs de recherche (et pas seulement).

Chargement d'images et de vidéos paresseux ( + natif ) - une solution native conçue pour améliorer les métriques du premier rendu grùce au chargement «paresseux» d'images et de vidéos.

Lazy loading modules / routes est un outil que l'on retrouve dans tous les frameworks et bibliothÚques populaires. Vous permet de charger "paresseusement" des morceaux de fonctionnalité d'application.

La mise en cache des fichiers avec les agents de service vous permet de mettre en cache des fichiers dans un navigateur et de ne pas les tĂ©lĂ©charger Ă  chaque fois depuis le serveur. Peut-ĂȘtre la seule façon de faire le mode hors ligne dans une application de navigateur.

Mise en cache HTTP - En utilisant certains en-tĂȘtes HTTP, vous pouvez considĂ©rablement amĂ©liorer la vitesse de chargement des pages et rĂ©duire la charge du serveur.

All Articles