iframe メソッドを使用してファイル アップロード スクリプトを作成しています。バックエンドで、ファイルのアップロード後、スクリプトはさらにいくつかのことを行います。そのため、ファイルがアップロードされるとすぐにブラウザー (iframe に移動) に出力をフラッシュし、スクリプトを続行します。Chrome コンソールから、ブラウザーが応答を受信したこと (200 OK) を確認できますが、何らかの理由で、ブラウザーはスクリプト全体が終了した後にしか応答をレンダリングしないため、かなりの遅延が発生します。なぜこうなった?ブラウザにすぐにレンダリングさせるにはどうすればよいですか?
SO および外部でこのトピックに関する多くの記事、ブログ、Q/A を読み、次のヒントを得ましたが、どれも機能していないようです: - 一部のブラウザーでは、レンダリングを開始するために最小バイト数 (256 /1024/4096)。- 終了タグが欠落している場合、ブラウザはレンダリングを開始する前に待機する傾向があります。- コンテンツの長さが必要です。そうしないと、ブラウザがさらにデータを待機し続ける可能性があります。
上記をカバーしましたが、他に何か不足していますか?
Backend code:
$r = "
<!DOCTYPE html>
<head>
<title></title>
</head>
<body>
<p id='response'>$response</p>
<p>".str_repeat(".", 4096)."</p>
</body>
</html>
";
ignore_user_abort(true);
set_time_limit(0);
ob_end_clean();
ob_start();
echo $r;
header("Content-Length: ".ob_get_length());
header("Connection: close", true);
header("Content-Encoding: none");
ob_end_flush();
flush();
Frontend code:
var iframe = document.getElementById("uploaddocframe_" + aid);
var iframeobj = (iframe.contentWindow || iframe.contentDocument);
if(iframeobj.document) {
var iframedocument = iframeobj.document;
var response = iframedocument.getElementById("response").innerHTML;
if(response == "success"){
//Do something
}
else {
// Do something
}
}