Réglage innerHTML est synchrone, comme le sont la plupart des changements que vous pouvez faire pour les DOM. Toutefois, le rendu de la page web est une autre histoire.
(Rappelez-vous, DOM signifie "Document Object Model". C'est juste un "modèle", une représentation de données. Ce que l'utilisateur voit sur son écran est une image de la façon dont ce modèle devrait ressembler. Donc, en changeant le modèle n'est pas instantanément changer l'image - il prendre le temps de mise à jour.)
L'exécution de JavaScript et de rendu de la page web effectivement se produire séparément. Pour le mettre simplement, d'abord tous de JavaScript sur la page de pistes (à partir de la boucle d'événements - découvrez cette excellente vidéo pour plus de détails) et ensuite, après que le navigateur rend toutes les modifications apportées à la page web de l'utilisateur pour voir. C'est pourquoi le "blocage" est une grosse affaire, - l'exécution de calcul intensif code empêche le navigateur de la "JS" de l'étape et dans la "le rendu de la page" de l'étape, provoquant la page de geler ou de bégayer.
Chrome pipeline ressemble à ceci:
Comme vous pouvez le voir, tous les JavaScript qui se produit en premier. Puis la page est de style, dessiné, peint, et composition - le "rendu". Pas tous de ce pipeline sera exécutée à chaque frame. Cela dépend de ce que les éléments de la page a changé, le cas échéant, et comment ils doivent être réaffichées.
Remarque: alert()
est également synchrone et exécute pendant le JavaScript étape, c'est pourquoi la boîte de dialogue d'avertissement s'affiche avant de voir les modifications apportées à la page web.
Vous pouvez maintenant demander "tiens, qu'est-ce exactement est exécuté dans que 'JavaScript' étape dans le pipeline? Fait tout mon code exécuté à 60 fois par seconde?" La réponse est "non", et il va revenir à la façon dont la JS boucle d'événement de travaux. Code JS ne fonctionne que si il est dans la pile de choses comme des écouteurs d'événement, les délais d'attente, que ce soit. Voir la vidéo précédente (vraiment).
https://developers.google.com/web/fundamentals/performance/rendering/