ホームページ > 記事 > ウェブフロントエンド > パフォーマンス消費量の比較: リフローと再描画ではどちらがより多くのリソースを消費しますか?
リフローと再描画: どちらの方がより多くのパフォーマンスを消費しますか?
フロントエンド開発では、パフォーマンスの最適化が重要な問題です。パフォーマンスのボトルネックの 1 つは、ブラウザのリフローおよび再描画操作です。この記事では、リフローと再描画の定義を調べ、それらのパフォーマンスの低下を具体的なコード例と比較します。
リフローとは、ブラウザがページ要素の位置と幾何学的プロパティを再計算するプロセスを指します。レイアウトが変更されたり、スタイル属性が変更された場合、ブラウザは要素の位置とサイズを再計算する必要があり、このプロセスはリフローと呼ばれます。リフローによりレンダリング ツリー全体が再構築されるため、パフォーマンスが非常に消費されます。
再描画とは、ブラウザがレイアウトに影響を与えることなく、最新のスタイル計算に基づいて要素を再描画するプロセスを指します。再描画によってレイアウトは変更されず、要素のスタイルにのみ影響します。ただし、再描画プロセスでは要素を走査して再描画する必要があるため、ある程度のパフォーマンスの低下も発生します。
リフローと再描画のパフォーマンスの違いをよりよく理解するために、次のコード例を使用してテストします。 1000 個の div 要素を含むページがあり、各 div にクラス名「box」のスタイルがあるとします。
<!DOCTYPE html> <html> <head> <style> .box { width: 100px; height: 100px; background-color: red; margin: 10px; } </style> </head> <body> <div id="container"> <!-- 1000个div --> </div> <script> // 创建1000个div元素 for (let i = 0; i < 1000; i++) { const div = document.createElement('div'); div.classList.add('box'); document.getElementById('container').appendChild(div); } // 添加一个scroll事件监听器 window.addEventListener('scroll', function() { // 修改样式属性 document.getElementById('container').style.backgroundColor = 'blue'; }); </script> </body> </html>
上記のコードでは、クラス「box」を持つ 1000 個の div 要素を作成し、スクロール イベント リスナーを追加しました。ページがスクロールするにつれて、これらの div 要素を含むコンテナの背景色を変更します。
ブラウザの開発者ツールを使用して、リフローと再描画のパフォーマンスの低下を観察してみましょう。
まず、ページ内のスクロール バーをクリックしてスクロールします。スクロール イベントごとに、ブラウザはリフロー操作を実行して要素の位置とレイアウトを再計算する必要があります。ブラウザのレンダラー ツールを使用すると、リフロー操作にかかる時間を確認できます。
次に、スクロール バーをクリックしてスクロールしますが、このときは再描画操作のみを実行します。ブラウザのレンダラー ツールを使用すると、再描画操作にかかる時間を確認できます。
テスト後、リフロー操作は再描画操作よりもパフォーマンスに負荷がかかると結論付けることができます。リフロー操作では要素の位置とレイアウトの再計算が必要ですが、再描画操作では要素のスタイルの再描画のみが必要となるためです。
実際の開発プロセスでは、頻繁なリフロー操作はパフォーマンスの低下につながるため、避けるように努める必要があります。最適化方法は、スタイル属性の変更をCSSのtransform属性で置き換えることで、リフローの頻度を減らすことができます。
要約すると、リフローと再描画はブラウザのレンダリング プロセスにおける 2 つの重要な概念です。リフローでは要素の位置とレイアウトを再計算する必要があるため、リフローは再描画よりもパフォーマンスに負荷がかかります。実際の開発では、ページのパフォーマンスを向上させるためにリフローの頻度を減らすように努める必要があります。
以上がパフォーマンス消費量の比較: リフローと再描画ではどちらがより多くのリソースを消費しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。