重要なレンダーパスを最適化するには
重要なレンダーパス
Critical Rendering Path
プライマリレンダーパスは
DOM parsingからレンダリングへのパス.
主なプロセス
多くのJavaScriptフレームワークは、自身の論理を実行する前にこのイベントを待っています.したがって、ブラウザはEventStartとEventEndタイムスタンプを取得します.これにより、この操作を実行するのにどれくらいの時間がかかるかを追跡できます.
解析器がJavaScriptをブロックしていない場合、DOMContent LoadはDOInteractiveの後に発生します.
測定パス
Chrome DevtoolのLightHouseとPerformanceを使って、測定経路を簡単に見ることができます.(誰かが必要なら後で整理してあげます)
じゃ、一人ずつ計算しましょう.
1. HTML + Image
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Critical Path: No Style</title>
</head>
<body>
<p>Hello <span>web performance</span> students!</p>
<div><img src="awesome-photo.jpg"></div>
</body>
</html>
パフォーマンスモード
ブルーラインDOMContLoad(DCL)レッドラインはonLoad(L)です.
htmlの受信には205 ms、216 msでDCLイベントが発生し、受信画像には118 ms、335 msでLが発生する.
ここから、イメージのダウンロードがParserをブロックしないことがわかります.
ただし、onLoadイベントはイメージによってブロックされます.
画像は初期レンダリングを妨げませんが、できるだけ早く描画する必要があります.
2.HTML+画像+外部CSS+外部スクリプト
<!DOCTYPE html>
<html>
<head>
<title>Critical Path: Measure Script</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="style.css" rel="stylesheet">
</head>
<body onload="measureCRP()">
<p>Hello <span>web performance</span> students!</p>
<div><img src="awesome-photo.jpg"></div>
<script src="timing.js"></script>
</body>
</html>
パフォーマンスモード
CSSとJavascriptを受信する2つのネットワークリクエストが追加されました.
前述したように、CSSおよびJavascriptは、ParserをロックすることによってDCLを遅延させる.
では、ここでasyncをscriptに入れるとどうなるのでしょうか.
パフォーマンスモード
Parserがロックされていないため、DCLはDOMをロードし、ほぼすぐに発生します.L発生時間に差はない.
また、Media Queryを使用して必要に応じてCSS要素を分割すると、パフォーマンスモードは次のようになります.
パフォーマンスモード
3.HTML+画像+インラインCSS+インラインスクリプト
<!DOCTYPE html>
<html>
<head>
<title>Critical Path: Measure Inlined</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
p { font-weight: bold }
span { color: red }
p span { display: none }
img { float: right }
</style>
</head>
<body>
<p>Hello <span>web performance</span> students!</p>
<div><img src="awesome-photo.jpg"></div>
<script>
var span = document.getElementsByTagName('span')[0];
span.textContent = 'interactive'; // change DOM text content
span.style.display = 'inline'; // change CSSOM property
// create a new element, style it, and append it to the DOM
var loadTime = document.createElement('div');
loadTime.textContent = 'You loaded this page on: ' + new Date();
loadTime.style.color = 'blue';
document.body.appendChild(loadTime);
</script>
</body>
</html>
HTMLのサイズは大きくなりますが、ロードする要素がないため、DCLはHTMLをロードした直後に有効になります.(例ではCSSやScriptは簡単で問題はありませんが、実際にはHTMLなので問題になるのではないでしょうか?)ここまでたくさんの文章を書いてしまい、少し申し訳ありませんが、まだ終わっていません.
次の文章では、最終的に疑問を持ってその疑問を解決する過程を整理します.ううう
(思ったより書く時間が多く、勉強も丁寧になりました)
予告編:DOM/CSSOM部分とRender TreeをしてLayoutとPaintをするというわけではありません!!
Reference
この問題について(重要なレンダーパスを最適化するには), 我々は、より多くの情報をここで見つけました https://velog.io/@soorokim/중요-렌더링-경로-최적화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol