ホームページ ウェブフロントエンド jsチュートリアル JavaScriptのパフォーマンス最適化(リペイントとリフロー)_基礎知識

JavaScriptのパフォーマンス最適化(リペイントとリフロー)_基礎知識

May 16, 2016 pm 05:37 PM

コードをコピーします コードは次のとおりです:

再描画 (再描画)、再描画が変更された場合、要素の外観は変更されますが、レイアウトは変更されません。たとえば、アウトライン、可視性、背景色を変更しても、DOM 構造のレンダリングには影響しません。

リフロー (レンダリング)、再ペイントとの違いは、DOM 構造のレンダリングに影響を与えると同時に、再ペイントをトリガーし、それ自体とすべての親要素 (祖先) を変更することです。このオーバーヘッドは非常に大きくなります。コストがかかるため、パフォーマンスが低下することは避けられず、ページ要素が増えれば増えるほど、その影響はより顕著になります。

発生時:
DOM 要素の追加、変更 (コンテンツ)、削除 (リフロー再ペイント)
。DOM 要素のフォントの色のみを変更します (調整する必要がないため、再ペイントのみ)。 layout)
。要素
の外観に影響するプロパティを変更します。ブラウザ ウィンドウのサイズを変更し、ページをスクロールします。要素の特定のプロパティ (offsetLeft、offsetTop、offsetHeight、scrollTop) を読み取ります。 /Left/Width/Height、clientTop/Left/Width/Height、getComputedStyle()、currentStyle(IE))

回避方法:

。まずドキュメントから要素を削除し、変更が完了したら要素を元の位置に戻します。
。変更が完了したら、表示を変更します。これは元の値
です。複数の DOM ノードを作成する必要がある場合は、DocumentFragment を使用してそれらを一度にドキュメントに追加できます

var flagment = document.createDocumentFragment();

fragment.appendChild(document.createTextNode('keenboy test 111'));
fragment.appendChild(document.createElement('br'));
fragment.appendChild(document.createTextNode('keenboy test 222'));
document.body.appendChild(fragment);
. スタイルの変更に焦点を当てる
4.1 要素スタイルの属性を次のように変更します。できるだけ少なく
4.2 classNameを変更してスタイルを変更してみる
4.3 cssText属性でスタイル値を設定する
element.style.width=”80px” //reflow
element.style; .height=”90px” ; //reflow
element.style.border=”solid 1px red”; //reflow
上記は、より多くの呼び出しが行われるほど、より多くの
要素を生成します。 .style.cssText=” width:80px;height:80px;border:solid 1px red;”; //reflow
4.4 レイアウト属性値のキャッシュ
var left=elem.offsetLeft; を複数回使用すると、 reflow
4.5 要素の位置を絶対または固定に設定します
要素は標準フローから分離され、DOM ツリー構造からも分離されます。 リフローが必要な場合は、それ自体と従属要素のみをリフローします
4.6テーブル レイアウトは使用しないようにしてください
テーブル要素 リフローがトリガーされると、テーブル内の他のすべての要素がリフローされます。テーブルが使用に適している場合は、テーブル レイアウトを自動または固定に設定して、テーブルを 1 行ずつレンダリングできるようにすることができます。このアプローチは、リフローの影響範囲を制限することにもなります。
4.7 式の使用は避けてください。呼び出されるたびに再計算(ページの読み込みも含む)
が表示されます。

参考:

Yahoo! パフォーマンス エンジニア Nicole Sullivan の最新記事「リフローと再描画: CSS パフォーマンスにより JavaScript が遅くなる?」


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScriptの文字列文字を交換します JavaScriptの文字列文字を交換します Mar 11, 2025 am 12:07 AM

JavaScriptの文字列文字を交換します

カスタムGoogle検索APIセットアップチュートリアル カスタムGoogle検索APIセットアップチュートリアル Mar 04, 2025 am 01:06 AM

カスタムGoogle検索APIセットアップチュートリアル

例JSONファイルの例 例JSONファイルの例 Mar 03, 2025 am 12:35 AM

例JSONファイルの例

10 jQuery構文蛍光物 10 jQuery構文蛍光物 Mar 02, 2025 am 12:32 AM

10 jQuery構文蛍光物

8見事なjQueryページレイアウトプラグイン 8見事なjQueryページレイアウトプラグイン Mar 06, 2025 am 12:48 AM

8見事なjQueryページレイアウトプラグイン

独自のAjax Webアプリケーションを構築します 独自のAjax Webアプリケーションを構築します Mar 09, 2025 am 12:11 AM

独自のAjax Webアプリケーションを構築します

' this' JavaScriptで? ' this' JavaScriptで? Mar 04, 2025 am 01:15 AM

' this' JavaScriptで?

10 JavaScript&JQuery MVCチュートリアル 10 JavaScript&JQuery MVCチュートリアル Mar 02, 2025 am 01:16 AM

10 JavaScript&JQuery MVCチュートリアル

See all articles