js実行はDOMツリーの解析とレンダリングをブロックしますが、cssロードはDOMツリーの解析とレンダリングをブロックしますか?
よねつ
今回のテストを完了するために、まず科学普及に来て、chromeを利用してダウンロード速度を設定する方法(直接スキップ可能)1.chromeコンソールを開くと(F 12を押す)、下の図が見えます.赤い輪を描いたところに重点を置きます.
2.私が赤い輪を描いたところをクリックすると、下の図が見えます.GPRSという選択肢を選びます.
3.これで、リソースのダウンロード速度の上限は20 kb/sに制限されます.では、次は本題に入ります.
本題
1.cssロードはDOMツリーの解析をブロックしますか?コードの例:
css
function h () {
console.log(document.querySelectorAll('h1'))
}
setTimeout(h, 0)
これは いです。
仮定:cssロードはDOMツリーの解析とレンダリングをブロックします
仮定結果:bootstrap.cssがまだロードされていない前に、次の内容は解析的にレンダリングされません.では、最初に見たのは白い画面で、h 1は表示されません.そしてこの時logの結果は空の配列であるべきです.実績:下図
3.gif上の図から、cssがまだロードされていない場合、h 1は表示されませんが、コンソール出力は次のようになります.
このとき、DOMツリーは少なくともh 1に解析が完了しているが、このときcssはまだロードが完了していないことが分かる.すなわち、cssはDOMツリーの解析をブロックしないことを示す.
2.cssロードはDOMツリーのレンダリングをブロックしますか?上の図からも、cssがまだロードされていない場合、ページには白い画面が表示され、cssのロードが完了するまで赤いフォントが表示されません.つまり、次の内容は解析されていますが、レンダリングされていません.したがって、cssロードはDOMツリーレンダリングをブロックします.効果は下図を参照
5.gif
個人のこのようなメカニズムに対する評価
3.cssロードはjsの実行をブロックしますか?
以上の推論から,cssロードはDOMツリー解析をブロックしないが,DOMツリーレンダリングをブロックすることが分かった.では、cssロードはjs実行をブロックしますか?
同様に、コードによって検証する.
css
console.log('before css')
var startDate = new Date()
これは いです。
var endDate = new Date()
console.log('after css')
console.log(' ' + (endDate -startDate) + 'ms')
仮定:cssロードは後続のjs実行をブロックします
予想結果:linkの後ろにあるjsコードは、cssのロードが完了した後に実際の結果を実行する必要があります.
6.gif
上の図から、cssロード文の前にあるjsコードが先に実行されたが、cssロード文の後ろにあるコードは、cssロードが完了するまで実行されなかったことがわかります.これは、cssロードが後続のjs文の実行をブロックすることを示しています.詳細は下図(cssロードは5600+ms)を参照してください.
.png](/img/bVbf3O2)
結論は上記から、以下の結論を得ることができる.
公衆番号の検索を歓迎します:一線の私達あるいはコードをスキャンして参加します: