4

私はPHPでアプリケーションを作成していますが、PHPがバッファーとバッファー処理をどの程度適切に処理するかを判断するために、自分でテストを行うことにしました。具体的には、手動で呼び出すかどうかを確認したかったので、プログラムに大きな影響がありますob_start()ob_flush()

10KBのloremipsumを作成して、仕事に行きました。10KBのlipsum(display:none divブロック内)を100回書き込むforループの開始と終了にタイマーをPHPに入れて、合計1MBのデータを作成しました。これは、ランダムなCPUで十分な作業になると考えました。ロードは私のデータをあまり捨てません。

PHPタイマーに加えて、Chromeの開発者ツール(F12)を開いて、「時間」と「待ち時間」のフィールドを記録しました。用語が正しければ、「時間」はページが応答してレンダリングするのにかかった合計時間であり、「レイテンシ」はページがサーバーから最初にデータを受信するまでの時間です。

謎は次のとおりです。10KBのlipsum100xを書き込む以外に何もしない場合、平均は次のようになります。

PHP Time: 0.00630ms
Chrome Time: 565.6ms
Chrome Latency: 28.3ms

ob_start()私が最初とob_flush()最後に電話をかけるとき:

PHP Time: 0.00792ms
Chrome Time: 540ms
Chrome Latency: 33ms

ただし、これが謎です。電話をかけるob_start()ob_flush()、テキストの各10KBブロックの最初と最後で、Chromeが報告するレイテンシが4倍に急上昇します。

PHP Time: 0.005814ms
Chrome Time: 624.7ms
Chrome Latency: 134.9ms ???

私の知る限り、PHP出力の途中でバッファーを1/100フラッシュしているので、クロームレイテンシーを100分の1に削減する必要があります。ob_start()とはより高いバッファーで動作し、実際にはより低いバッファーにフラッシュされることを知っていob_flush()ます。より低いバッファーが同じ間隔でフラッシュすることを期待します。つまり、ほぼ同じレイテンシーが見られます。

私のテストリグは、Nvidia IONグラフィックス、Windows 7ホームプレミアム(32ビット)、およびほとんどデフォルト設定でApache2.2.22を実行するWAMPserverを備えた非常に控えめなIntelATOMネットブックです。Chrome24.0.1312.52mを使用しました。CPU負荷は中程度でしたが、テスト中は100%ではなく、RAMはほぼ満杯ではありませんでした。

テストコード: http: //pastebin.com/zf62Y4yz

ありがとう!

4

1 に答える 1

2

ob_flushコンテンツをクライアントに送信します。これがいつであるかをPHPに判断させるか、単一ので一度にすべてを実行することにより、ob_flushhttpメッセージ内の送信を効率的にバッチ処理できます。アービトレーションポイントで手動で分割すると、この場合は10Kごとに分割し、少なくとも1つの手動パッケージ送信を強制します。クライアントへのこのトランスポートのレイテンシーは、おそらく実際のphpバッファーフラッシュよりも長くなります。

于 2013-01-22T18:09:04.860 に答える