Yahoo のフロントエンド最適化手法の 1 つは、HTML の
部分を最初に出力することです (バッファを早期にフラッシュします)。この方法で、ブラウザは head を取得した後、head に css/js ファイルをダウンロードできます。全体を待たずに最初にHTMLをダウンロードした後、head内のcss/jsをダウンロードすることで、Webページを開く速度が向上します。
Transfer-Encoding: chunked ヘッダーが http1.1 に追加されました。このヘッダーの機能は、メッセージを出力のために複数のチャンクに分割することです。
メッセージの形式は次のとおりです:
Javaコード
チャンクボディ = *チャンク
「0」CRLF
フッター
CRLF
チャンク = チャンク サイズ [ チャンク拡張 ] CRLF
チャンクデータ CRLF
hex-no-zero =
チャンクサイズ = 16 進数、ゼロなし *16 進数
チャンク拡張子 = *( ";" チャンク拡張子名 [ "=" チャンク拡張子値 ] )
チャンク外部名 = トークン
チャンク拡張値 = トークン引用符付き文字列
チャンクデータ = チャンクサイズ(オクテット)
フッター = *エンティティヘッダー
チャンクボディ = *チャンク
「0」CRLF
フッター
CRLF
チャンク = チャンク サイズ [ チャンク拡張 ] CRLF
チャンクデータCRLF
hex-no-zero =
チャンクサイズ = 16 進数、ゼロなし *16 進数
チャンク拡張子 = *( ";" チャンク拡張子名 [ "=" チャンク拡張子値 ] )
チャンク外部名 = トークン
チャンク拡張値 = トークン引用符付き文字列
チャンクデータ = チャンクサイズ(OCTET)
フッター = *エンティティヘッダー
CRLE: キャリッジリターンとラインフィード (rn)
例:
Javaコード
...
Transfer-Encoding: chunked #ヘッダー内の 2 CRLE の後にメッセージを開始します
1
4
テスト
0
...
Transfer-Encoding: chunked #ヘッダー内の 2 CRLE の後にメッセージを開始します
1 #chunk のサイズを 16 進数で指定し、CRLE を追加します
4
テスト0
PHP で ob_flush を使用すると、チャンク出力を実現するために Transfer-Encoding: chunked ヘッダーが自動的に追加されますが、使用中にその効果が得られないことがよくあります。いくつかの問題を考慮する必要があります
1.PHPバッファ
PHP が Apache モジュールで実行されている場合は、フラッシュ関数を使用して PHP 出力に通知してください。 fastcgi モードで実行している場合は、ob_flush を使用して php に通知します。現時点では、gzip は失敗し、チャンク方式は各ブロックの独立した圧縮をサポートしていません。出力全体が圧縮された後でのみ、圧縮されたパッケージをチャンクで出力できます。互換性を確保するには、最初に ob_flush を呼び出してから、flush を呼び出します。
2. ブラウザバッファ
Transfer-Encoding: chunked ヘッダーに遭遇したときにブラウザーがどのように反応するかは、ブラウザーの実装によって異なります。私の実験では、Firefox ではチャンクのサイズに関係なくリアルタイムでチャンク データが表示されますが、IE8 と Chrome では一定時間経過後に表示されます。したがって、一部のブラウザでは有効になる前に、まず一定のサイズを出力する必要があります。
3. リバースプロキシサーバー
使用しているリバースプロキシサーバーはhttp1.1プロトコルをサポートしていますか?バックエンドのチャンク化はどのように処理されますか?プロキシバッファがいっぱいになる前にチャンクに遭遇した場合、バックエンドに従って出力されますか?
nginxのプロキシ機能はhttp1.0のみ対応しており、プロキシバッファが一杯の場合のみ出力します。
4. 高速CGIバッファ
FastCGI モードで実行している場合、Web サーバーは独自の fastcgi バッファーを持ち、出力する前にバッファーがいっぱいになるまで待機することがあります (これは nginx の場合です)。フラッシュ関数はPHPの出力バッファ出力のみを通知できます
チャンク転送エンコーディング
ハイパーテキスト転送プロトコル -- HTTP/1.1 チャンク転送エンコーディング
ob_flush と flash の違いを深く理解する
http://www.bkjia.com/PHPjc/478424.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478424.html技術記事 Yahoo のフロントエンド最適化手法の 1 つは、HTML のヘッド部分を最初に出力することです (バッファーを早期にフラッシュする)。この方法では、ブラウザーはヘッドを取得した後、待つことなく最初にヘッドに css/js ファイルをダウンロードできます。 ...