ブラウザでのページのレンダリング時間をできるだけ短縮するにはどうすればよいでしょうか? この記事は、次の点から始まります。
1. 効率的なCSSコードを書く まず、ブラウザが HTML コードを解析するプロセスを理解します。DOM ツリーが構築され、ページに表示される各要素がこの DOM ツリー内に作成されます。新しい要素が DOM ツリーに追加されるたびに、ブラウザは CSS エンジンを通じて CSS スタイルシートを検索し、要素に一致するスタイル ルールを見つけて、それを要素に適用します。 CSS エンジンはスタイルシートを検索し、各ルールを右から左に照合します。 プロセスを理解すると、次の 2 つの側面から CSS コードを最適化できることがわかります。1. 定義される CSS スタイル ルールが少ないほど良いので、CSS ファイル内の不要なスタイル定義をすばやく削除します。2. 各ルールのセレクターの記述方法を最適化し、CSS エンジンが、このルールを現在の要素に適用する必要があるかどうかを一目でわかるようにして、エンジンが不要な回り道を回避できるようにします。 たとえば、CSS を記述する非効率的な方法を以下に示します。 a、ワイルドカードをキーセレクターとして使用します(キーセレクターは各ルールの右端のセレクターを参照します) コードをコピー コードは次のとおりです。体 * {...} .hide-scrollbars * {...} b. ラベルをキーセレクターとして使用する コードをコピー コードは次のとおりです。ul li a {...} #フッター h3 {...} * html #atticPromo は {...} にあります c、余分な書き込み コードをコピー コードは次のとおりです。ul#top_blue_nav {...} フォーム#ユーザーログイン {...} d. :hover 疑似クラスを非リンク タグに追加します。これにより、厳密な doctype を持つページの IE7 および IE8 での表示が非常に遅くなります。 コードをコピー コードは次のとおりです。h3:ホバー{...} .foo:hover {...} #foo:ホバー{...} div.faa :hover {...} 最適化の提案: コードをコピー コードは次のとおりです。/* 順序なし li と順序あり li に異なる色を定義するには、次のように記述します: */ ul li {色: 青;} ol li {色: 赤;} /*liにクラスを追加すると、定義の効率が高くなります: */ .unordered-list-item {色: 青;} .ordered-list-item {色: 赤;} e. 接続されていないタグに :hover 疑似クラスを追加しないでください。 2番目に、CSS式の使用を避ける CSS 式は IE ブラウザでのみ機能します。Microsoft は、ページのパフォーマンスに重大な影響を与える可能性があるため、IE8 以降では CSS 式の使用を推奨していません。ウィンドウのサイズ変更イベントやマウスの移動など、どのようなイベントがトリガーされても、いつでも CSS 式が再計算されます。 3. CSSファイルをページ上部に配置する 本文セクションに外部スタイルシートまたはインライン スタイルシートを配置すると、すべてのスタイルシートがダウンロードされるまでブラウザはページの残りの部分のダウンロードを続行しないため、ページのレンダリング速度に影響します。さらに、インライン スタイル シート (<style> 内に配置されるスタイル) により、ページが再レンダリングされたり、非表示のページに特定の要素が表示されたりすることがあります。インライン スタイル シートは使用しないことをお勧めします。 4番目に、ページ画像のサイズを指定します ページ画像のサイズを指定する場合は、画像の実際のサイズと一致させる必要があります (サイズを指定して画像を拡大縮小しないでください)。これにより、サイズ変更によるページ構造の変更を回避できるため、ページのレンダリングを高速化できます。 5. ページヘッダーに文書コードを示す HTML ドキュメントは、ドキュメントのエンコード情報を含むデータ ストリームの形式でネットワーク経由で送信されます。ページのエンコーディング情報は通常、HTTP 応答のヘッダー情報またはドキュメント内の HTML タグで指定されます。クライアント ブラウザは、ページのエンコーディングを決定した後にのみ、ページを正しくレンダリングできます。したがって、ページを描画したり JavaScript コードを実行したりする前に、ほとんどのブラウザ (IE6、IE7、IE8 を除く) は、エンコーディング情報を見つけるために一定数のバイトのデータをバッファリングします。ブラウザによって、事前にバッファリングされるバイト数は異なります。ブラウザが、設定された量のプリバッファリングされたデータを受信した後でページのエンコーディング情報を見つけられなかった場合、ブラウザは独自に指定したデフォルトのエンコーディングに従ってページのレンダリングを開始します。この時点でページのエンコーディング情報を取得し、それが現在のエンコーディングと一致しない場合は、ページ全体を再レンダリングする必要があり、場合によってはデータの再取得も必要になります。したがって、サイズが 1 KB を超えるページの場合 (さまざまなブラウザでのテストによると、事前バッファリングされるデータの最大量は 1 KB です)、エンコード情報はできるだけ早くマークする必要があります。 最適化の提案: 注:この記事は、Google ドキュメントの本来の意味に沿って完全に翻訳されたものではありません。翻訳されたテキストは、私自身の理解と組み合わせて表現されています。誤りを見つけた場合は、修正していただければ幸いです。 |
>>: MySQL ディープ ページング (数千万のデータを素早くページ分割する方法)
キャンバスを使ってカラフルな時計を書いてみよう! 1. タイトル(1)時計のケースが与えられ、ページ...
MySQL のバージョン番号は 5.7.28 です。テーブル A には 390 万件のレコードがあり...
目次私たちが毎日実行している Linux システムとは何でしょうか? LinuxカーネルとGNUシス...
これは、よく使われるけれども忘れられがちな CSS 実装方法のコレクションです。抜けや追加があれば、...
HTML フォームは、名前、電子メール アドレス、場所、年齢などのユーザー情報を収集するためによく使...
MySQL は最もよく使用されるデータベースです。詳しく知るには、コンピュータにインストールする必...
背景:テーブルスペース: すべての INNODB データはテーブルスペース (共有テーブルスペース)...
ローカル Windows リモート デスクトップが Alibaba Cloud Ubuntu 16....
私は数年間 vi エディタを使ってきましたが、実用的な用途で使ったことはありませんでした。今日 Py...
Linux では、基本的に vi エディタのように「.sh」拡張子を持つテキストの処理と実行を記述す...
最近、CSS 関連の知識ポイントをいくつか見直し、CSS における典型的なマージンの重なりの問題を整...
1 問題の説明この記事では、確立された複合インデックスをソートし、レコード内の非インデックス フィー...
目次1. サーバーの状態を確認します。 2. ルートパスワードを変更します。 3. mysqlser...
DockerでOracle_11gをインストールする1. oracle_11gイメージを取得する d...
プロットレビュー前回の記事では、ロケーション命令の解析プロセスを分析しました。この内容を簡単に確認し...