2017-03-03 6 views
4

ブロッキングレンダリングの理解:私はCSSを特定の設定で評価されるかを理解しようとしていますCSS

は、私は私の<head>タグに以下の内容を持っていると仮定しましょう:

<html><head> 
... 
    <link href="reset.css" type="text/css" rel="stylesheet"> 
    <link href="style.css" type="text/css" rel="stylesheet"> 
    <link href="autocomplete.css" type="text/css" rel="stylesheet"> 
</head> 
<body> 
... html ... 
<script type="text/javascript" src="/js/script.js"></script> 
</body></html> 

さて、reset.cssを想定してみましょうし、 style.cssには、上記の折り畳み内容またはHTMLの要素にすぐに影響するいくつかの規則が含まれています。ただし、autocomplete.cssには、後で一部のJavaScriptで使用される、使用されるクラスのみが含まれています。

ここで、すでにダウンロードされたブラウザがreset.cssstyle.cssだが、autocomplete.cssがまだ保留中であるとします。 ブラウザのページの最後にブロッキングスクリプトタグが見つかるとどうなりますか?明らかに、HTMLをスクリプトタグまでレンダリングすることはできますが、欠けているブロックによってブロックされたスクリプトの実行はautocomplete.cssですか?

スクリプトタグは同期ではありません。

私が読んだ: https://developers.google.com/web/fundamentals/performance/critical-rendering-path/analyzing-crp

そして、そこにはCSSOMがあるまではJavaScriptの実行がブロックされていることを述べています。

Now: 1.ページのレンダリングの開始がautocomplete.cssになってもまだ到着していませんか?そして 2. autocomplete.cssがあるまでscript.js JavaScriptの実行がブロックされていますか?

注:私は、レンダリングとスクリプトの実行という2つの異なることを指摘しています。

+0

はこれをお読みください。ちょうどヒント** [レンダリングブロックを取り除くCSS](https://varvy.com/pagespeed/render-blocking-css.html)** –

+2

'autocomplete.css'が見つからない場合、ページはサイレントエラーをスローします: **リソースのロードに失敗しました:net :: ERR_FILE_NOT_FOUND **。しかし、スクリプトを含めてすべてがロードされ続けます。ファイルが存在し、読み込みに時間がかかる場合、cssが先頭にあるのでページが読み込まれず、残りのページを読み込む前にロードする必要があります。 –

答えて

3

すべてCSSがレンダリングをブロックしています。このルールの唯一の例外は、DOMがまだ知りません(javascript経由でオン/オフロードされた非同期のロード済み)CSSです。

CSSすべてがCSSオブジェクトモデルを構築することで解決されない(または解決したと思う)まで、ページはレンダリングされず、javascriptは実行されません。ただし、resolveは必ずしもloadを意味するものではありません。

  • 負荷&解析:それは2つのことを意味することができます。 2k行以上のコードの場合は、適切なツールで測定するときに気付くでしょう。もし10k行以上のコードなら、ツールを使わなくても気づくでしょう。折り目の上にある要素に関する規則が含まれているかどうかは関係ありません。
  • (ネットワーク上の問題または無効なルールのため)ロード/解析できません。CSSがロード/解析されたときにエラーが返された場合、より速く解決され、結果の違いはほとんど目立たないでしょう。サーバーがエラーを返さない(そして応答しない)場合、CSSOMのビルド、ページの読み込み、スクリプトの実行がブロックされます。

資源:

+0

これをクリアするには: '/ js/script.js'の実行はブロックされますが、レンダリングは実行されません。 – worenga

+0

それは私の質問の核心になる:https://developers.google.com/web/fundamentals/performance/critical-rendering-path/analyzing-crpそれを読むことは、jsの実行は、cssomが構築されるまでブロックされている(スクリプトは非同期ではありません)。 'autocomplete.css'にはhtmlの内容に適用されるルールが含まれていなくても、スクリプトはブロックされますか?私は今、いくつかのCSSがないのにレンダリングが起こることを理解していますか? – worenga

+1

@worega私は、私が主題で見つけたものに照らして私の答えを更新しました。 'CSSOM'がビルドされるまで、' javascript'の実行が遅れるようです。 –

1

オートコンプリートはCSSファイルです。そのため、htmlで定義されているクラスにスタイルプロパティを追加するだけです。 CSSがない場合でも、javascriptは正しく実行されます。

jsが、スタイルがautocomplete.cssで定義されているクラスのいくつかのCSSスタイルを変更した場合のみ起こります。しかしそれでもそれは起こりそうもありません。

+0

autocomplete.cssが到着するまでブラウザが '/ js/script.js'の実行を待つ必要はありませんか? – worenga

2

最新のパフォーマンスの推奨事項は以下のとおりです。

1)ブラウザが上記-倍-コンテンツをレンダリングする必要があるヘッダーにインラインすべてのCSS 。スクロールせずに表示されるコンテンツ。

2)は、このようなものでは非同期ページの下部またはより良い負荷にそれを他のすべてのCSSを追加します。https://github.com/filamentgroup/loadCSS

関連する問題