performance web EST expérience utilisateurs
image: Navigateur
le temps nécessaire pour obtenir toutes les ressources de tous les serveurs
image: fil
Le plus long délai est l'aller-rotoure entre le téléphone et la tour cellulaire. L'air est la cause de la plus grande latence
Les navigateurs mobiles sont super puissants. Les appareils mobiles ne sont pas
image: serveur
image: navigateur avec la page duck-duck-go
image: page web avec les resultats de duck-duck-go
image: navigateur tout blanc
<!doctype HTML> <html lang="fr-fr"> <head> <meta charset="UTF-8"/> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Mon site</title> <link rel="stylesheet" src="styles.css"/> <script src="myscript.js"></script> </head> <body> <h1>Ma Page</h1> <p>Un paragraph avec un <a href="//example.com">lien</a></p> <figure> <img src="monImage.jpg" alt="description de l'image"/> <caption>Ma photo</caption> </figure> <script src="anotherscript.js"></script> </body> </html>
Ce n'est pas si simple...
Les coulisses du chargement
Interaction utilisateur
image: page web avec les resultats de duck-duck-go
image: navigateur tout blanc
Ce n'est pas si simple...
DNS = "l'emplacement des actifs"
www.example.com
93.184.216.34
Étapes de la demande
Négociation de liaison TCP à trois voies
TCP handshake
Établissement d'une connexion
L'hôte, généralement le navigateur, envoie un paquet TCP SYNchronize au serveur. Le serveur reçoit le SYN et renvoie un accusé de réception SYNchronize. L'hôte reçoit le SYN-ACK du serveur et envoie un acquittement. Le serveur reçoit ACK et la connexion de socket TCP est établie.
Détermine le chiffrement pour la communication
Ce n'est pas si simple...
Algorithme pour détecter la bande passante disponible
Confirme la livraison en renvoyant ACK, les accusés de réception
Confirme la livraison en renvoyant ACK, les accusés de réception
<!doctype HTML> <html lang="fr-fr"> <head> <meta charset="UTF-8"/> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Mon site</title> <link rel="stylesheet" src="styles.css"/> <script src="myscript.js"></script> </head> <body> <h1>Ma Page</h1> <p>Un paragraph avec un <a href="//example.com">lien</a></p> <figure> <img src="monImage.jpg" alt="description de l'image"/> <caption>Ma photo</caption> </figure> <script src="anotherscript.js"></script> </body> </html>
Ce n'est pas si simple
Décrit le contenu
Demande les ressources hautement prioritaires
<link rel="stylesheet" src="styles.css"/> <script src="myscript.js" async></script> <img src="monImage.jpg" alt="description de l'image"/> <script src="unautrescript.js" defer></script>
<script> | RENDER | PAUSE | RENDER | ||
DOWNLOAD JS | |||||
EXECUTE JS | |||||
<script defer> | RENDER | ||||
DOWNLOAD | |||||
EXECUTE | |||||
<script async> | RENDER | PAUSE | RENDER | ||
DOWNLOAD | |||||
EXECUTE |
<!doctype HTML>
<html lang="fr-fr">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mon site</title>
<link rel="stylesheet" src="styles.css"/>
<script src="myscript.js"></script>
</head>
<body>
<h1>Ma Page</h1>
<p>Un paragraph avec un <a href="//example.com">lien</a></p>
<figure>
<img src="monImage.jpg" alt="description de l'image"/>
<caption>Ma photo</caption>
</figure>
<script src="anotherscript.js"></script>
</body>
</html>
Décrit les règles de style
:root { font-size: 16px; } body { color: #333333; } h1 { font-size: 2rem; } p a { color: blue; } figure img { border: none; width: 100%; }
:root { font-size: 16px; } body { color: #333333; } h1 { font-size: 2rem; } p a { color: blue; } figure img { border: none; width: 100%; }
:root { font-size: 16px; } body { color: #333333; } h1 { font-size: 2rem; } p a { color: blue; } img { border: none; width: 100%; }
image: screen shot of accessiblity tab showing accessiblity names
Jusqu'à la construction de l'AOM, le contenu n'est pas accessible aux lecteurs d'écran.
*Analysés dans des arbres à syntaxe abstraite, générant code optimize et/ou binaire exécuté sur le thread principal.
**Générera une erreur si JavaScript est exécute sur un nœud DOM qui n'a pas encore été rencontré
Screen shot of a simple javascript event handler in ASTExplorer.net
DOM et CSSOM: combinés pour former l’arbre de rendu. Contient que les nœuds nécessaires au rendu de la page.
La creation du "Render Tree" - Computed Styles
visibility: hidden
: ouidisplay: none
: nonDétermine les règles CSS pour chaque nœud visible (et caché).
Calcule la disposition de chaque élément visible
Détermine les dimensions de tous les nœuds de l'arbre de rendu
img { width: 100%; }
<img src="monImage.jpg" alt="description de l'image"/>
img { width: 100%; height: auto; }
<img src="monImage.jpg" alt="description de l'image" width="100" height="100"/>
z-index
supérieur<video>
and <canvas>
will-change
propertyisolation: isolate
Fusionne les couches pour calculer la
valeur RGBA de chaque pixel
When a change is made:
Recalculer presque tout!
img { width: 100%; }
<img src="monImage.jpg" alt="description de l'image"/>
img { width: 100%; height: auto; }
<img src="monImage.jpg" alt="description de l'image" width="100" height="100"/>
Pas de embouteillage sur le thread principal. Que ca peut repondre a l'utilisateur en moins de 50ms, et peut anime en moins de 16.67ms (60fps)