Question d'entretien pour Développeur frontend

Expliquez-moi ce que fait réellement le navigateur entre l'exécution d'un gestionnaire de clic et l'apparition de la frame suivante à l'écran.

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Le gestionnaire de clic s'exécute jusqu'au bout comme une seule tâche. Toutes les microtâches qu'il a mises en file, y compris les callbacks de promesses résolues, se vident ensuite, avant tout le reste. Seulement après, si une frame est due, le navigateur exécute les callbacks requestAnimationFrame et passe par le style, le layout, le paint et le composite. Une tâche longue ou une chaîne interminable de microtâches retarde cette frame, et les utilisateurs lisent ce retard comme des saccades.

Pourquoi les recruteurs posent cette question

Presque tout le travail de performance frontend revient à savoir ce qui bloque la frame. Le recruteur veut entendre que le scripting, le style, le layout et le paint partagent un seul thread principal, que les microtâches ne sont pas un moyen de rendre la main au navigateur, et que requestAnimationFrame existe pour le travail qui doit atterrir avant le paint. Ça prédit aussi si vous savez déboguer une plainte de réactivité ou si vous allez juste éparpiller des setTimeout jusqu'à ce que le symptôme se déplace.

Comment structurer votre réponse

  • Nommez les trois phases dans l'ordre : tâche, vidage des microtâches, opportunité de rendu.
  • Soulignez que les microtâches affament le moteur de rendu alors qu'un timeout rend la main.
  • Dites où se situe requestAnimationFrame par rapport au style et au layout.
  • Reliez ça à une métrique comme la latence d'interaction.

Exemple de réponse

Exemple parlé, à la première personne

Le gestionnaire lui-même est une tâche sur le thread principal, donc il s'exécute du début à la fin sans rien pour l'interrompre. Dès qu'il retourne, le navigateur vide la file des microtâches, donc toute continuation d'await ou tout callback then de promesse s'exécute là, et si celles-ci continuent d'empiler des microtâches le navigateur n'a jamais l'occasion de peindre. Une fois cette file vide, et seulement si une frame est vraiment due, le navigateur exécute les callbacks requestAnimationFrame, recalcule le style, fait le layout, peint et compose. C'est pour ça que je considère les tâches longues comme le vrai ennemi. Sur un tableau de bord sur lequel j'ai travaillé, un changement de filtre faisait un tri synchrone d'environ quarante mille lignes dans le gestionnaire, et le clic semblait mort pendant environ deux cents millisecondes. En le découpant pour que le gestionnaire ne mette à jour que le champ, puis en rendant la main avec scheduler.yield avant la passe coûteuse, le budget de frame est resté intact et l'interaction a commencé à répondre immédiatement alors que le travail total était identique.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Pourquoi attendre une promesse déjà résolue ne donne-t-il pas au navigateur l'occasion de peindre ?
  • Quand utiliseriez-vous requestAnimationFrame plutôt qu'un timeout ?
  • Comment découperiez-vous une tâche longue sans changer le résultat ?

Autres questions pour Développeur frontend

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot