innerHTMLの設定は同期的であり、DOMに対して行うことができるほとんどの変更も同様です。ただし、Webページのレンダリングは別の話です。
(DOMは「ドキュメントオブジェクトモデル」を意味します。これは単なる「モデル」であり、データを表しています。ユーザーが画面に表示するのは、そのモデルの外観の画像です。したがって、モデルを変更しても、瞬時に画像を変更します-更新にはしばらく時間がかかります。)
JavaScriptの実行とWebページのレンダリングは、実際には別々に行われます。- (チェックアウトイベントループからページを実行に最初にすべてのJavaScriptの、単純化し、それを置くために、この優れたビデオその後、詳細についての)とした後ブラウザが参照するには、ユーザーのためのWebページへの変更をレンダリングします。これが、「ブロック」が非常に重要である理由です。計算集約型のコードを実行すると、ブラウザが「JSの実行」ステップを通過して「ページのレンダリング」ステップに入り、ページがフリーズまたは途切れることになります。
Chromeのパイプラインは次のようになります。

ご覧のとおり、すべてのJavaScriptが最初に発生します。次に、ページがスタイル設定、レイアウト、ペイント、および合成されます-「レンダリング」。このパイプラインのすべてがすべてのフレームを実行するわけではありません。どのページ要素が変更されたか、またどのように再レンダリングする必要があるかによって異なります。
注:alert()
も同期しており、JavaScriptステップ中に実行されます。そのため、Webページへの変更が表示される前にアラートダイアログが表示されます。
ここで、「ちょっと待ってください、パイプラインの「JavaScript」ステップで正確に何が実行されますか?すべてのコードは1秒あたり60回実行されますか?」答えは「いいえ」で、JSイベントループの動作に戻ります。JSコードは、それがスタック内にある場合にのみ実行されます-イベントリスナー、タイムアウトなどから。前のビデオを見てください(本当に)。
https://developers.google.com/web/fundamentals/performance/rendering/