高パフォーマンスの WEB 開発。Flush はページをチャンクに分割し、段階的にレンダリングします。Flush は、ページをステップごとに分割してレンダリングします。

WBOY
リリース: 2016-05-16 18:24:55
オリジナル
1343 人が閲覧しました

一般に、この状況に対処する場合、誰もが ajax を使用し、最初に HTML をクライアントに出力し、次に ajax を使用して時間のかかるリソースの取得と読み込みを行います。 ajax を使用する場合の問題は、リクエストの数が増加し、追加の js コードと js によって呼び出されるリクエスト インターフェイスを記述する必要があることです。
この状況に対しては、応答をブロック単位でエンコードして送信するという別の方法があります。応答はブロックにエンコードされます。最初に処理する必要のない HTML コードの一部をクライアントに送信し、時間のかかる他のコードの実行後に他の HTML コードを送信できます。
チャンクエンコーディング (チャンクエンコーディング)
チャンクエンコーディングは http1.1 でのみサポートされているエンコーディング形式です (もちろん、現在 1.1 をサポートしていないブラウザはありません)。チャンクエンコーディングと一般的な応答の違いは次のとおりです。 :

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

通常の応答:
HTTP/ 1.1 200 OK
キャッシュ制御: private、max-age=60
Content-Length: 75785
Content-Type: text/html; charset=utf-8
..その他の応答ヘッダー

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

チャンクエンコーディング応答:
HTTP/1.1 200 OK
Cache-Control: private, max-age=60
Content -Length: 75785
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
..その他の応答ヘッダー
chunk #1 (これは通常、16 進数です)このチャンクのサイズをマークします)
chunk #2
チャンク #3
....

ヘッダーに分割された単純なページおよびコンテンツ (部分)。コンテンツ部分はデータベースを読み取る必要があり、これには 3 秒かかり、その後 csdn ロゴが表示されます。ヘッダー部分にはcnblogsのロゴが表示されます。コードは次のとおりです:

コードをコピー コードは次のとおりです:
< div id="head" style="border:1px Solid #ccc;">
cnblogs ロゴ




<%
// 3 秒間スリープします
Thread.currentThread().sleep(3000)
csdn logo




http://213.186.44.204 :8080/ChunkTest/nochunk.jsp (サーバーの調子が悪いので、優しくしてください)
このデモ アドレスを開くと、通常のページが表示されます。3 秒後にダウンロードが開始され、2 つのロゴが表示されます。リソース読み込みのウ​​ォーターフォール チャートは次のとおりです。


次に、コードを次のように変更し、フラッシュを追加し、応答で前の HTML がチャンクで出力されるようにします。
out.flush(); // フラッシュ応答、チャンク出力

;
<%
// 3 秒間スリープします
Thread.currentThread().sleep(3000);
csdn ロゴ
< ;img src="http://files.jb51.net/upload/20100619130753558.gif" />

デモ アドレス: http://213.186.44.204:8080/ChunkTest/chunk.jsp
このデモ アドレスを開くと、最初に cnblogs ロゴがダウンロードされて表示され、次に csdn ロゴが表示されることがわかりますか? 3 秒後? リソース読み込みの図 以下のように:
高パフォーマンスの WEB 開発。Flush はページをチャンクに分割し、段階的にレンダリングします。Flush は、ページをステップごとに分割してレンダリングします。
この図から、jsp ページが実行される前に cnblogs ロゴのダウンロードが開始されることがわかります。これはブロック出力の影響です。


監視ツール:

チャンク エンコーディングが正常に使用されたかどうかを確認するには、ツールを使用して、応答ヘッダーに Transfer-Encoding: chunked が含まれているかどうかを確認するだけです。ただし、チャンクの詳細情報を監視したい場合は、現時点では httpwatch のみがサポートしています。分割したチャンクの数を確認できますが、次のように番号が 1 つ多く表示されるようです。

高パフォーマンスの WEB 開発。Flush はページをチャンクに分割し、段階的にレンダリングします。Flush は、ページをステップごとに分割してレンダリングします。

関連ラベル:
ソース:php.cn
前の記事:jqueryポップアップレイヤー登録ページなど(asp.net背景)_jquery 次の記事:jqueryの複数行スクロールコード(詳細説明付き)_jquery
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート