5

大きな php スクリプトは、フラッシュを使用して、生成された html の一部をブラウザに送信しますが、スクリプトの大部分を実行するのに約 . 20秒。

フラッシュ後に実行されるスクリプトの部分はかなり大きく、サーバーの予約 (90% cpu) から多くを消費します。

5 回に 1 回、ページが空白 (白) のままになります。これは、ページが読み込まれていることを示す画像を送信するためのフラッシュが到着しなかったことを意味します。プログラムが終了し、ページ全体をブラウザに送信する必要がある場合も、ページは空白のままです (ブラウザはまだ読み込み中であることを示します)。

注目すべき点: 戻るボタンを押すと、ページ全体 (スクリプト全体が実行された後にブラウザーに読み込まれているはず) が 1 秒間表示された後、ブラウザーは前のページに戻ります。

他の 4 回はすべて、ページが適切に読み込まれます。php スクリプトの入力は、5 回すべて同じです。

.htacces ファイルに次の設定があります。

addhandler x-httpd-php5-cgi .php5 
addhandler x-httpd-php5-cgi .php5
addhandler x-httpd-php5-cgi .php5 
Header Set Cache-Control "max-age=0, no-store"

これは、生成されたコードをブラウザーにフラッシュするステートメントです。

print str_pad('',4096)."\n";
ob_flush();
flush();

この問題の原因は何ですか?

4

2 に答える 2

2

ヒントすることしかできません:はflush()それをapache / webserverに送信します。apache/webserverはバッファリング/待機できます。apache/webserverはバッファリング/待機できる任意の数のプロキシを使用してネットワークに送信します。これは最終的にブラウザに送信され、バッファリングを決定することもできます。 /待つ。これらの頭痛の種すべてに対処したくない場合は、非同期方式を選択してください。ギアマンはそれを非常に簡単にしますが、もちろん厳密には必要ではありません。

于 2012-05-08T17:06:47.293 に答える
2
print str_pad('',4096)."\n";

空の文字列を繰り返していることに気付きましたか? 多分あなたは意味した

print str_pad(' ',4096)."\n";

このステートメントの目的は、一部の Web ブラウザーは、一定量のバイトが受信されるか、応答が完了するまで、ページをレンダリングしないためです。

于 2012-05-08T18:01:33.220 に答える