Das Festlegen von innerHTML ist synchron, ebenso wie die meisten Änderungen, die Sie am DOM vornehmen können. Das Rendern der Webseite ist jedoch eine andere Geschichte.
(Denken Sie daran, DOM steht für "Document Object Model". Es ist nur ein "Modell", eine Darstellung von Daten. Der Benutzer sieht auf seinem Bildschirm ein Bild davon, wie dieses Modell aussehen sollte. Das Ändern des Modells erfolgt also nicht sofort Ändern Sie das Bild - die Aktualisierung dauert einige Zeit.)
Das Ausführen von JavaScript und das Rendern der Webseite erfolgt separat. Um es vereinfachend, zuerst alle JavaScript auf der Seite ausgeführt wird (von der Ereignisschleife - schauen Sie sich dieses hervorragende Video für weitere Details) und dann nach , dass der Browser auf die Webseite alle Änderungen macht für den Benutzer zu sehen. Aus diesem Grund ist das "Blockieren" eine so große Sache - das Ausführen von rechenintensivem Code verhindert, dass der Browser den Schritt "JS ausführen" übergeht und in den Schritt "Seite rendern" übergeht, wodurch die Seite einfriert oder stottert.
Die Pipeline von Chrome sieht folgendermaßen aus:

Wie Sie sehen können, geschieht das gesamte JavaScript zuerst. Dann wird die Seite gestylt, angelegt, gemalt und zusammengesetzt - das "Rendern". Nicht die gesamte Pipeline führt jeden Frame aus. Dies hängt davon ab, welche Seitenelemente gegebenenfalls geändert wurden und wie sie erneut gerendert werden müssen.
Hinweis: alert()Ist auch synchron und wird während des JavaScript-Schritts ausgeführt. Aus diesem Grund wird das Warndialogfeld angezeigt, bevor Sie Änderungen an der Webseite sehen.
Sie könnten jetzt fragen: "Moment mal, was genau wird in diesem 'JavaScript'-Schritt in der Pipeline ausgeführt? Wird mein gesamter Code 60 Mal pro Sekunde ausgeführt?" Die Antwort lautet "Nein" und geht zurück auf die Funktionsweise der JS-Ereignisschleife. JS-Code wird nur ausgeführt, wenn er sich im Stapel befindet - von Ereignissen wie Ereignis-Listenern, Zeitüberschreitungen usw. Siehe vorheriges Video (wirklich).
https://developers.google.com/web/fundamentals/performance/rendering/