0

ブラウザに送信するデータが大量にあり、おそらく 100 MB 程度です。ストリーミングをシミュレートできるように、それらを小さなファイルにまとめました。それぞれ 500kb のファイルが 200 個あるとします。JavaScript で 200 個のファイルの配列を作成し、それをループして、それぞれに対して ajax 呼び出しを行います。それは正常に動作します。次に、それを改善したかったので、サーバー上のすべてを gzip したところ、元のチャンク サイズの約 20% になりました。私のajaxは次のファイルを呼び出します:

fileserver.php?file=/temp/media_C46_20110719_113332_ori-0.js.gz

fileserver.php には、非常に簡単に次のようなものがあります。

$filepath = isset($_GET['file']) ? $_GET['file'] : '';

  if($filepath!=''){
   if(substr($filepath,-2,2)=='gz'){
    header("Content-Type: text/plain" );
    header("Content-Length: " .(string)(filesize($filepath)) );
    header("Content-Encoding: gzip");
    readfile(filepath);
  }
  else{
    header("Location: ".$filepath );
  }
}

繰り返しますが、これは完全に機能します。問題は、永遠にかかることです!Chrome のネットワーク タブを見ると、100kb のチャンクを取得するのに 15 秒ほどかかっています。そのファイルを 1 秒もかからずに直接ダウンロードできます。上記の php スクリプトの実行にはほとんど時間がかかりません。クライアント (ブラウザー) がコンテンツを膨らませるのに少し時間がかかることはわかっていますが、1 秒未満である必要があります。では、なんと 15 秒もかかっています。これを確認するために使用できる他のツールはありますか?

ヘッダー変数をApacheで設定できることは知っていますが、それにアクセスすることはできません.phpでそれを行うことは機能的に同等ですよね?それらは設定する正しいヘッダーですか?

4

1 に答える 1

0

私は問題を理解しました。filesize() 関数が正しいパスを取得していなかったため、空白として出力されていました。正しい情報を送信するように修正したところ、はるかに高速に動作するようになりました。

于 2012-06-08T16:25:46.170 に答える