高性能ウェブサイトの最適化ガイド

高性能ウェブサイトの最適化ガイド

パフォーマンスの黄金律:

エンドユーザーの応答時間のわずか 10% ~ 20% が HTML ドキュメントのダウンロードに費やされます。残りの 80% ~ 90% の時間は、ページ上のすべてのコンポーネントのダウンロードに費やされます。

ルール1: HTTPリクエストを減らす

これは、イメージ マップ、CSS スプライト (長所と短所の両方)、インライン イメージ (data: URL モード、IE ではサポートされておらず、キャッシュできません)、およびスクリプトとスタイル シートのマージを使用することで実現できます。

ルール2: コンテンツ配信ネットワークを使用する

アプリケーション Web サーバーがユーザーに近いほど、HTTP 要求の応答時間が短縮されます。
コンポーネント Web サーバーがユーザーに近いほど、複数の HTTP 要求に対する応答時間が短縮されます。
コンテンツ配信ネットワーク (CDN) は、複数の地理的な場所に分散された Web サーバーのグループであり、ユーザーにコンテンツをより効率的に配信するために使用されます。

ルール3: Expiresヘッダーを追加する

Expires ヘッダーは、Web サーバーが Web クライアントに、指定された時間までコンポーネントの現在のコピーを使用できることを通知するために使用されます。サーバーとクライアントのクロックが厳密に同期され、期限が切れた後にサーバー構成で新しい日付が提供される必要があります。
Max-Age と mod_expires は、Expires の欠点を補うことができます。

ルール4: コンポーネントを圧縮する

HTTP 1.1から、

ルール5: スタイルシートを先頭に置く

白画面を避けるためのプログレッシブプレゼンテーション

ルール6: スクリプトを一番下に置く

HTTP 1.1 仕様では、ブラウザが各ホスト名から 2 つのコンポーネントを並行してダウンロードすることを推奨しており、スクリプトをダウンロードするときには並行ダウンロードは実際には無効になっています。
理由の 1 つは、スクリプトが document.write を使用してページ コンテンツを変更する可能性があるため、ブラウザーはページが適切にレイアウトされることを確認するまで待機することです。
2 つ目の理由は、スクリプトが正しい順序で実行されるようにするためです。複数のスクリプトが並行してダウンロードされると、応答が特定の順序でブラウザーに到着するという保証はありません。
スクリプトを先頭に配置すると、それに続くコンテンツのレンダリングがブロックされ、それに続くコンポーネントのダウンロードがブロックされます。

ルール7: CSS式を避ける

この式メソッドは他のブラウザでは無視されますが、IE では便利なツールです。 IE でプロパティを設定して、ブラウザー間で一貫したエクスペリエンスを作成する機能。たとえば、IE [IE6、IE7 (Quirk)、IE8 (Quirk]] は min-width プロパティをサポートしていません。この問題は、次の式メソッドを使用して解決できます。

コードをコピー
コードは次のとおりです。

幅: 式(document.body.clientwidth<600?"600px": "auto");
最小幅: 600px;

式の問題は、望んでいるよりも頻繁に評価されることです。これらは、ページがレンダリングされ、サイズが変更されるときだけでなく、ページがスクロールされたときや、ユーザーがページ上でマウスを移動したときにも評価されます。追跡するために、CSS 式にカウンターを追加できます。
式カウンターの例:
http://stevesouders.com/hpws/expression-counter.php


コードをコピー
コードは次のとおりです。

P {
幅: 式(setCntr(),document.body.clientwidth<600?"600px": "auto");
最小幅: 600px;
}

式の代替: イベント ハンドラー
onresize イベントでスタイルの width プロパティを設定することで、min-width の問題を修正します。
イベント ハンドラーの例:
イベントハンドラ
この例では、setMinWidth() 関数を使用して、ブラウザのサイズが変更されたときにすべての段落要素のサイズを変更します。

コードをコピー
コードは次のとおりです。

関数setMinWidth(){
setCntr(); //評価の数を表示するために使用される
var aElements = document.getElementsByTagName("p");
for(var i=0;i&lt;aElements.length;i++){
aElements[i].runtimeStyle.width=(document.body.clientwidth<600?"600px": "自動");
}
}
if(1!=navigator.userAgent.indexOf("MSIE")){
ウィンドウの最小幅を設定します。
}

これにより、ブラウザのサイズが変更されると幅が動的に設定されますが、最初にレンダリングされるときに段落のサイズが適切に設定されないため、ページでは「1 回限りの式」を使用して初期幅を設定する必要もあります。

ルール8: 外部のJavaScriptとCSSを使用する

ルール9: DNSルックアップを減らす

ルール10: JavaScriptを小さく保つ

合理化 vs. 難読化 vs. 圧縮

ルール11: リダイレクトを避ける

Web サーバーがブラウザーにリダイレクトを送信すると、応答には 3xx 範囲のステータス コードが含まれます。これは、ユーザー エージェントが要求を完了するためにさらにアクションを実行する必要があることを示します。

リダイレクトは HTML ドキュメントのダウンロードに影響します。

ルール12: 重複したスクリプトを削除する

ルール13: ETagを構成する

ルール 14: Ajax をキャッシュ可能にする

最後に、この本の内容の概要をご紹介します。

<<:  mysql5.6 マスタースレーブ設定と非同期の問題の詳細な説明

>>:  HTML 基本コントロール入門_PowerNode Java アカデミー

推薦する

JSはスネークゲームを実装する

目次1. 初期化構造2. 蛇の色のレンダリング3. ヘビの動き4. ヘビの死を判定する方法 ヘビの死...

Linux で crontab 出力リダイレクトが有効にならない問題の解決方法

質問LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...

Centos7環境でMySQL 5.6のインスタンスを複数作成する方法の詳細な説明

この記事では、CentOS 7 環境で MySQL 5.6 の複数のインスタンスを作成する方法につい...

よく使われるCSSスタイル(レイアウト)の詳しい説明

新しいCSS3プロパティと互換性ありCSS3では、プラグインprefixfree.min.jsを使用...

JavaScript にはすでに Object があるのに、なぜ Map が必要なのでしょうか?

目次1. オブジェクトをマップとして扱わない1. 未定義のプロパティはプロトタイプチェーンを通じてア...

HTMLの空リンクの役割についての簡単な説明

空のリンク:つまり、ターゲット エンドポイントとのリンクはありません。フォーマット <a hr...

インタラクティブな視覚化 JS ライブラリ gojs の使い方の紹介とヒント

目次1. gojsの紹介2. Gojsのアプリケーションシナリオ3. gojs を選ぶ理由: 4. ...

nginxリバースプロキシwebSocket設定の詳細な説明

最近、プロジェクトで作業しているときに webSocket プロトコルを使用し、WeChat アプレ...

vue+elementUI で埋め込みテーブルを実装する方法の例

大学 4 年生のときのインターンシップ中に、表内のデータの番号をクリックすると、そのデータの下に新し...

選択ドロップダウンボックスの値をIDに渡してコードを実装する方法

完全なコードは次のとおりです。 HTMLコード:コードをコピーコードは次のとおりです。 <!-...

Linux の一般的なテキスト処理コマンドと vim テキストエディタ

今日は、いくつかの一般的なテキスト処理コマンドとvimテキストエディタを紹介します。 3日目 - 一...

Centos7.3 Nginx をインストールして展開し、https を設定する方法

設置環境1. gccのインストールnginxをインストールするには、まず公式サイトからダウンロードし...

MySQL binlog の使用方法の詳細な説明

binlog は、MySQL のすべての DML 操作を記録するバイナリ ログ ファイルです。 bi...

crontab 実行時間とシステム時間の不一致の解決方法

序文LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...

JavaScript におけるブラウザ互換性の問題について簡単に説明します

ブラウザの互換性は、実際の開発では見落とされがちな最も重要な部分です。古いバージョンのブラウザの互換...