web-dev-qa-db-ja.com

XmlHttpRequest進行間隔

XmlHttpRequestsを使用してサーバーに画像をアップロードしています。これらのアップロードの進行状況をユーザーに表示したいと思います。

残念ながら、私のonprogress-eventハンドラーの呼び出し間隔が長すぎます。通常、500kイメージの場合、onprogressは1回または2回だけ呼び出されます。

これが私のコードです:

/* This function is not called often enough */
function progress(e){
    console.log('Uploading: ' + Math.round((e.loaded / e.total) * 100) + ' %');
}

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', progress, false);
xhr.send(data);

この動作を変更できますか、それともブラウザ実装のどこかにハードコードされていますか?

37
Oscar

W3は XMLHttpRequest Level 2 ドキュメントで次のガイドラインを示しています。ブラウザーごとに明らかに異なるレベルの適合が予想されます。

アップロード:

リクエストエンティティの本文がアップロードされており、アップロード完了フラグがfalseの場合、XMLHttpRequestUploadオブジェクトで、progressという名前の進行状況イベントを発生させるタスクをキューイングします50msごとまたは送信されたバイトごとに、最も頻度が低い方 。 -W3 XMLHttpRequestレベル2(強調のために太字)

ダウンロード:

進行状況の通知を行うと言われている場合、ダウンロードの進行中に、約50ミリ秒ごとまたは受信バイトごとに最も頻度の低い方という進行状況イベントを起動するタスクをキューに入れます。 -W3 XMLHttpRequestレベル2(強調のために太字)

この機能をカスタマイズするためのAPIについては知りません。

33
Matt Bierner

また、ローカルのデバッグHTTPプロキシ(Charlesなど)は、進行状況イベントの起動間隔に影響を与える傾向があることに注意してください。

3
user574535