Aller au contenu principal

📄 Processus de navigation web

1. Expliquez comment le navigateur obtient le HTML depuis le serveur et comment il le rend Ă  l'Ă©cran​

Décrivez comment le navigateur récupÚre le HTML cÎté serveur et comment il effectue le rendu du HTML.

1. Envoi de la requĂȘte​

  • Saisie de l'URL : L'utilisateur saisit une URL dans le navigateur ou clique sur un lien. Le navigateur commence alors Ă  analyser cette URL pour dĂ©terminer Ă  quel serveur envoyer la requĂȘte.
  • RĂ©solution DNS : Le navigateur effectue une recherche DNS pour trouver l'adresse IP du serveur correspondant.
  • Établissement de la connexion : Le navigateur envoie une requĂȘte Ă  l'adresse IP du serveur via le protocole HTTP ou HTTPS. Dans le cas du HTTPS, une connexion SSL/TLS doit Ă©galement ĂȘtre Ă©tablie.

2. RĂ©ponse du serveur​

  • Traitement de la requĂȘte : Le serveur reçoit la requĂȘte et, en fonction du chemin et des paramĂštres, lit les donnĂ©es correspondantes depuis la base de donnĂ©es.
  • Envoi de la Response : Le serveur renvoie ensuite le document HTML en tant que partie de la HTTP Response au navigateur. Cette rĂ©ponse contient Ă©galement des informations telles que le code de statut et d'autres paramĂštres (CORS, content-type), etc.

3. Analyse du HTML​

  • Construction du DOM Tree : Le navigateur commence Ă  lire le document HTML et, en fonction des balises et attributs HTML, le convertit en DOM et commence Ă  construire le DOM Tree en mĂ©moire.
  • Requesting subresources (requĂȘte de sous-ressources) : Lors de l'analyse du HTML, si le navigateur rencontre des ressources externes telles que des fichiers CSS, JavaScript ou des images, il envoie des requĂȘtes supplĂ©mentaires au serveur pour les rĂ©cupĂ©rer.

4. Render Page (rendu de la page)​

  • Construction du CSSOM Tree : Le navigateur analyse les fichiers CSS et construit le CSSOM Tree.
  • Render Tree : Le navigateur fusionne le DOM Tree et le CSSOM Tree en un Render Tree, contenant tous les noeuds Ă  rendre avec leurs styles correspondants.
  • Layout (mise en page) : Le navigateur effectue la mise en page (Layout ou Reflow), calculant la position et la taille de chaque noeud.
  • Paint (peinture) : Enfin, le navigateur passe par la phase de peinture (painting), dessinant le contenu de chaque noeud sur la page.

5. Interaction JavaScript​

  • ExĂ©cution du JavaScript : Si le HTML contient du JavaScript, le navigateur l'analyse et l'exĂ©cute. Cette action peut modifier le DOM et changer les styles.

L'ensemble du processus est progressif. En thĂ©orie, l'utilisateur verra d'abord une partie du contenu de la page, puis la page complĂšte au fur et Ă  mesure. Durant ce processus, plusieurs reflows et repaints peuvent ĂȘtre dĂ©clenchĂ©s, surtout lorsque la page contient des styles complexes ou des effets interactifs. En plus des optimisations intĂ©grĂ©es du navigateur, les dĂ©veloppeurs emploient gĂ©nĂ©ralement diverses techniques pour rendre l'expĂ©rience utilisateur plus fluide.

2. DĂ©crivez le Reflow et le Repaint​

Reflow (redistribution)​

Le Reflow désigne les changements dans le DOM d'une page web qui obligent le navigateur à recalculer les positions des éléments et à les placer correctement. En termes simples, le Layout doit réorganiser les éléments.

DĂ©clencheurs du Reflow​

Le reflow se produit dans deux scénarios : soit un changement global affectant toute la page, soit un changement partiel affectant un bloc de composant.

  • Le chargement initial de la page constitue le reflow le plus impactant.
  • Ajout ou suppression d'Ă©lĂ©ments DOM.
  • Modification de la taille d'un Ă©lĂ©ment, comme l'ajout de contenu ou le changement de taille de police.
  • Modification de la disposition d'un Ă©lĂ©ment, par exemple via margin ou padding.
  • Redimensionnement de la fenĂȘtre du navigateur.
  • DĂ©clenchement de pseudo-classes, comme l'effet hover.

Repaint (repeinture)​

Le Repaint se produit lorsqu'il n'y a pas de modification du Layout, mais simplement une mise à jour ou un changement d'apparence de l'élément. Puisque les éléments sont contenus dans le Layout, un reflow entraßne nécessairement un repaint. En revanche, un repaint seul ne déclenche pas forcément un reflow.

DĂ©clencheurs du Repaint​

  • Modification de la couleur ou de l'arriĂšre-plan d'un Ă©lĂ©ment, par exemple en ajoutant une propriĂ©tĂ© color ou en modifiant les propriĂ©tĂ©s background.
  • Modification de l'ombre ou du border d'un Ă©lĂ©ment relĂšve Ă©galement du repaint.

Comment optimiser le Reflow ou le Repaint​

  • Ne pas utiliser de table pour la mise en page. Les propriĂ©tĂ©s des tables sont susceptibles de dĂ©clencher une rĂ©organisation de la mise en page lors de modifications. Si l'utilisation d'une table est inĂ©vitable, il est recommandĂ© d'ajouter les propriĂ©tĂ©s suivantes pour ne rendre qu'une ligne Ă  la fois et Ă©viter d'affecter l'ensemble du tableau : table-layout: auto; ou table-layout: fixed;.
  • Il ne faut pas manipuler le DOM pour ajuster les styles un par un. Il est prĂ©fĂ©rable de dĂ©finir les styles nĂ©cessaires dans une class, puis de basculer entre les classes via JavaScript.
    • Par exemple, avec le framework Vue, on peut utiliser le binding de class pour changer les styles, plutĂŽt que de modifier directement les styles via une fonction.
  • Pour les scĂ©narios nĂ©cessitant des changements frĂ©quents, comme un systĂšme d'onglets, il est prĂ©fĂ©rable d'utiliser v-show plutĂŽt que v-if. Le premier utilise simplement la propriĂ©tĂ© CSS display: none; pour masquer l'Ă©lĂ©ment, tandis que le second dĂ©clenche le cycle de vie, recrĂ©ant ou dĂ©truisant les Ă©lĂ©ments, ce qui entraĂźne une consommation de performances plus importante.
  • Si un reflow est vraiment inĂ©vitable, vous pouvez l'optimiser avec requestAnimationFrame (principalement parce que cette API est conçue pour les animations et se synchronise avec le taux de rafraĂźchissement du navigateur), ce qui permet de regrouper plusieurs reflows en un seul et de rĂ©duire le nombre de repaints.
    • Par exemple, pour une animation nĂ©cessitant le dĂ©placement vers une cible sur la page, requestAnimationFrame peut ĂȘtre utilisĂ© pour calculer chaque mouvement.
    • De mĂȘme, certaines propriĂ©tĂ©s CSS3 peuvent dĂ©clencher l'accĂ©lĂ©ration matĂ©rielle cĂŽtĂ© client, amĂ©liorant les performances d'animation : transform, opacity, filters, Will-change.
  • Si possible, appliquez les changements de style sur les noeuds DOM de niveau infĂ©rieur pour Ă©viter qu'un changement de style sur l'Ă©lĂ©ment parent n'affecte tous ses Ă©lĂ©ments enfants.
  • Si vous devez exĂ©cuter des animations, faites-le sur des Ă©lĂ©ments en positionnement absolu (absolute, fixed), ce qui a peu d'impact sur les autres Ă©lĂ©ments et ne dĂ©clenche qu'un repaint, Ă©vitant ainsi le reflow.

Example​

// bad
const element = document.querySelector('.wrapper');
element.style.margin = '4px';
element.style.padding = '6px';
element.style.borderRadius = '10px';
// good
.update {
margin: 4px;
padding: 6px;
border-radius: 10px;
}

const element = document.querySelector('.wrapper');
element.classList.add('update');

Reference​

3. DĂ©crivez quand le navigateur envoie une requĂȘte OPTIONS au serveur​

Expliquez dans quelles circonstances le navigateur envoie une requĂȘte OPTIONS au serveur.

Dans la plupart des cas, cela s'applique dans le cadre du CORS. Avant d'envoyer la requĂȘte rĂ©elle, une action de preflight (prĂ©-vĂ©rification) a lieu : le navigateur envoie d'abord une requĂȘte OPTIONS pour demander au serveur s'il autorise cette requĂȘte cross-origin. Si le serveur rĂ©pond favorablement, le navigateur envoie alors la vĂ©ritable requĂȘte. Dans le cas contraire, le navigateur affiche une erreur.

De plus, si la mĂ©thode de la requĂȘte n'est pas GET, HEAD ou POST, cela dĂ©clenchera Ă©galement une requĂȘte OPTIONS.