検索
ホームページウェブフロントエンドhtmlチュートリアルWeb ページのパフォーマンスを向上させるためのヒント_html/css_WEB-ITnose

最近では、ページの読み込みサイズが数メガバイトになることが多く、パフォーマンスの最適化が避けられないホットなテーマになっています。 WEB アプリケーションがスムーズになればなるほど、ユーザー エクスペリエンスが向上し、アクセス数も増加します。つまり、美しすぎる CSS3 アニメーションや複数操作の DOM 要素がパフォーマンスへの影響を考慮しているかどうかを反省する必要があります。パフォーマンスの最適化について話す前に、ブラウザーのビジュアル描画における 2 つの用語を明確にする必要があります:

  • 再描画: 一部の操作が DOM 要素の表示に影響を与えるが、レイアウトには影響しない場合、不透明度、背景などのブラウザーの再描画が発生します。 -色、可視性、アウトラインのプロパティ。ブラウザは DOM 内のすべてのノードの可視性をチェックする必要があるため、再描画は非常に重いロジックです。一部のレイヤーは再描画された要素のレイヤーの下に配置される可能性があります。

  • リフロー (リフロー): リフローはより破壊的な操作であり、ブラウザーがすべての要素の座標位置とサイズを再計算します。多くの場合、1 つの要素を変更すると、その子要素、親要素、隣接する要素も変更されます。

ユーザーまたはアプリケーション自体が何らかのロジックを実行しているかどうかに関係なく、これら 2 つの操作はブラウザーのプロセスをブロックします。極端な場合には、CSS の影響により JavaScript の実行が遅くなる可能性があります。以下は、リフロー イベントをトリガーするいくつかのシナリオです:

  • 表示されている DOM 要素の追加、削除、変更
  • 要素の幅の変更など、一部の CSS スタイルの追加、削除、変更は、隣接する要素のレイアウト位置に影響します
  • CSS3 アニメーションとトランジション効果
  • offsetWidth と offsetHeight を使用します。この状況は非常に奇妙です。要素の offsetWidth 属性と offsetHeight 属性を読み取ると、リフローがトリガーされます
  • マウスのホバリング、テキスト入力、ウィンドウのサイズ変更、フォント スタイルの変更などのユーザー動作が発生します。

ブラウザの基礎となる実装は次のとおりです。異なるため、ページのレンダリングのオーバーヘッドも異なります。幸いなことに、パフォーマンスを最適化するための一般的なルールがいくつかあります。

ベストプラクティスによって提案されているレイアウトテクニックを使用してください

2015 年になった今でも、私はインライン スタイルとテーブル レイアウトを使用しないと言っています。

HTML ドキュメントがダウンロードされると、インライン スタイルによって追加のリフロー イベントがトリガーされます。パーサーはテーブル レイアウトを解析するときに多数のセルのサイズを計算する必要があるため、重い操作になります。多くの場合、セルはテーブル ヘッダーの幅に基づいて決定されるため、table-layout:fixed を使用すると、パフォーマンスの消費を一部軽減できます。

Flexbox レイアウトを使用する場合は、ページのロード後にフレックス項目の位置とサイズが変更される可能性があるため、パフォーマンスが低下します。

効率化された CSS スタイル

スタイルの数が少ないほど、リフローが速くなります。また、過度に複雑なセレクターを使用しないようにしてください。この問題は、Bootstrap などのフレームワークを使用する Web サイトで特に深刻です。未使用の CSS、uCSS、grunt-uncss、gulp-uncss などのツールを使用して、無駄なスタイルを効果的に削除します。

DOM 階層の合理化

DOM 階層の合理化とは、DOM ツリーのレベル数と各ブランチの DOM 要素の数を減らすことを指し、その結果、レベルと数が少なくなるほどリフローが速くなります。さらに、古いブラウザを考慮する必要がない場合は、無意味なパッケージのタグと階層を削除するように努める必要があります。

DOM ツリーのきめ細かな操作

DOM ツリーを操作するときの粒度は可能な限り細かくする必要があり、これにより、ローカルの DOM 変更が全体に及ぼす影響を軽減できます。

ドキュメント フローから複雑なアニメーション効果を削除する

アニメーションを使用する要素がドキュメント フローの外にあることを確認する必要があります。position:Absolute 属性と Position:Fixed 属性を使用する要素は、これらのレイヤーを変更しても、他のレイヤーの要素には影響しません。

非表示メソッドの賢い使い方

表示: なしを使用すると、非表示の要素はページの再描画イベントやリフロー イベントをトリガーしないため、これらの要素が非表示になっている間にスタイルを設定し、その後、それらを表示状態に変換できます。設定が完了しました。

要素をバッチで更新する

すべての DOM 要素を 1 語で更新する方が、複数回更新するよりもパフォーマンスが向上します。次のコードは 3 つのページ リフローをトリガーします:

var myelement = document.getElementById('myelement');myelement.width = '100px';myelement.height = '200px';myelement.style.margin = '10px';

次のコードは 1 つのページ リフロー イベントに減らすことができ、コードの保守性が向上します:

var myelement = document.getElementById('myelement');myelement.classList.add('newstyles');.newstyles {    width: 100px;    height: 200px;    margin: 10px;}

同様に、DOM 操作の頻度も減らすことができます。以下に示すような順序なしリストを作成するとします。

各項目をバッチで追加すると、複数のページのリフローがトリガーされます。簡単で効率的な方法は、DOM フラグメントを使用してメモリ内に完全な DOM ノードを作成することです。それをすぐに DOM に追加します:

var    i, li,    frag = document.createDocumentFragment(),    ul = frag.appendChild(document.createElement('ul'));for (i = 1; i <= 3; i++) {    li = ul.appendChild(document.createElement('li'));    li.textContent = 'item ' + i;}document.body.appendChild(frag);

约束元素变化的影响

这里的约束是指,尽量避免某个元素的变化引起大范围的变化。假设我们有一个 tab 选项卡的组件,选项卡内部的内容长短不一,这就导致了每个选项卡的高度不唯一。这一设计带来的问题就是每次切换选项卡时,周围的元素都要重新布局。我们可以通过一个固定高度来避免这一情况。

权衡流畅度和性能

一次移动一像素的位置看起来虽然很流畅,但对于某些低性能终端会是很大的压力。一次移动四像素降低帧速虽然看起来稍有些迟钝,但性能压力降低了。这就是需要我们权衡的地方:流畅度和性能。

使用开发者工具分析页面重绘

目前主流浏览器都在开发者工具中提供了监控页面重绘的功能。在 Blink/Webkit 内核的浏览器中,使用 Timeline 面板可以记录一个页面活动详情:

下面是火狐开发者工具中的 TimeLine:

在 IE 中这个功能被放置在了 UI Responsiveness 面板中:

所有的浏览器都使用绿色来显示页面重绘和页面回流事件。上面的测试只是几个简单的示例,其中没有调用繁重的动画效果,所以布局渲染在总时间中占据了较大比重。减少页面回流和页面重绘,自然提高页面性能。

本文根据 @Craig Buckler 的《 10 Ways to Minimize Reflows and Improve Performance 》所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处: http://www.sitepoint.com/10-ways-minimize-reflows-improve-performance/ 。

南北

前端开发者,关注性能优化和动效设计,活跃于 Github @pinggod 、微博@ping4god 和博客 pinggod.com ,替身众多。如果你沉醉于 Kairosoft、午时三刻工作室的游戏,请来和我做朋友:)。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTML:構造、CSS:スタイル、JavaScript:動作HTML:構造、CSS:スタイル、JavaScript:動作Apr 18, 2025 am 12:09 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

HTMLの未来:ウェブデザインの進化とトレンドHTMLの未来:ウェブデザインの進化とトレンドApr 17, 2025 am 12:12 AM

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

HTML対CSS対JavaScript:比較概要HTML対CSS対JavaScript:比較概要Apr 16, 2025 am 12:04 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。HTMLはコンテンツ構造を担当し、CSSはスタイルを担当し、JavaScriptは動的な動作を担当します。 1。HTMLは、セマンティクスを確保するためにタグを使用してWebページの構造とコンテンツを定義します。 2。CSSは、セレクターと属性を介してWebページスタイルを制御して、美しく読みやすくします。 3。JavaScriptは、動的でインタラクティブな関数を実現するために、スクリプトを通じてWebページの動作を制御します。

HTML:それはプログラミング言語か何か他のものですか?HTML:それはプログラミング言語か何か他のものですか?Apr 15, 2025 am 12:13 AM

htmlisnotaprogramminglanguage; itisamarkuplanguage.1)htmlStructuresandformatswebcontentusingtags.2)ItworkswithcsssssssssdjavascriptforInteractivity、強化を促進します。

HTML:Webページの構造の構築HTML:Webページの構造の構築Apr 14, 2025 am 12:14 AM

HTMLは、Webページ構造の構築の基礎です。 1。HTMLは、コンテンツ構造とセマンティクス、および使用などを定義します。タグ。 2. SEO効果を改善するために、などのセマンティックマーカーを提供します。 3.タグを介したユーザーの相互作用を実現するには、フォーム検証に注意してください。 4. JavaScriptと組み合わせて、動的効果を実現するなどの高度な要素を使用します。 5.一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれ、検証ツールが必要です。 6.最適化戦略には、HTTP要求の削減、HTMLの圧縮、セマンティックタグの使用などが含まれます。

テキストからウェブサイトへ:HTMLの力テキストからウェブサイトへ:HTMLの力Apr 13, 2025 am 12:07 AM

HTMLは、Webページを構築するために使用される言語であり、タグと属性を使用してWebページの構造とコンテンツを定義します。 1)htmlは、などのタグを介してドキュメント構造を整理します。 2)ブラウザはHTMLを分析してDOMを構築し、Webページをレンダリングします。 3)マルチメディア関数を強化するなど、HTML5の新機能。 4)一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれます。 5)最適化の提案には、セマンティックタグの使用とファイルサイズの削減が含まれます。

HTML、CSS、およびJavaScriptの理解:初心者向けガイドHTML、CSS、およびJavaScriptの理解:初心者向けガイドApr 12, 2025 am 12:02 AM

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割:Webコンテンツの構造HTMLの役割:Webコンテンツの構造Apr 11, 2025 am 12:12 AM

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール