3

ユーザーに表示する前に画像をプリロードすることに大きく依存する Web アプリケーションを開発しています。ただし、ユーザーのアクションによっては、帯域幅を浪費しないように、ファイナライズする前にイメージの読み込みを終了することが重要な場合があります。これを行うことは可能ですか?もしそうなら、どのように正確ですか?

4

3 に答える 3

2

はい、HTTP ストリーミングと特別な AJAX メソッドを使用してこれを実現できます。

サーバー上の各画像を base64 文字列にエンコードします。注: これにより、ペイロード サイズが最大 33% 増加します。PHPの場合、base64_encode関数を見てください

base64 でエンコードされた文字列をnバイト サイズのチャンクに分割します。各チャンクを出力し、毎回出力バッファをフラッシュします。flushphp.netのコメント セクションにいくつかのヒントがあります。

AJAX 呼び出しの実装方法によっては、XMLHttpRequest を中止して、ブラウザーに接続を強制的に閉じることができます。永続的なチェック方法の詳細は 次のとおりですhttp://ajaxpatterns.org/HTTP_Streaming#Streaming_Wiki_Demo

ajax 呼び出しが完了し、すべてのデータがダウンロードされたら、データ URL を使用してブラウザーで画像を作成するだけです。data:image/png;base64,ENCODED_DATA

このhttp://ajaxpatterns.org/archive/HTTP_Streaming.phpもご覧ください。

于 2012-09-01T23:33:30.637 に答える
2

事前にロードするように要求したイメージを停止することはできないと思います。

いずれにせよ、画像が要求された後に接続を終了しようとしても、クライアントがそれを受け入れなくても、サーバーがデータ転送を完了する可能性が非常に高くなります (つまり、帯域幅はまだ浪費されています)。

あなたができる最善のことは、javascriptを使用して一度に1つずつ画像をプリロードすることです. そうすれば、画像の読み込みを停止したい場合、現在読み込み中の画像を停止できなくても、残りの画像のプリロードを停止できます。


jQuery を使用している場合は、AJAX リクエストを中止してみてください。

jQuery を使用して Ajax リクエストを中止する

jQuery.ajax() 関数を使用して画像をプリロードします。XMLHttpRequest オブジェクトには、呼び出すことができる abort() メソッドがあります。

ただし、これは実際には文書化されていません。ajax() 関数は、画像をロードするようには設計されていません。この関数から得られる画像は、使用できない奇妙なバイナリになります。(画像フォーマットがサポートされていないため、テキストとして解釈されます)

ただし、ブラウザが本来の処理を行っていると仮定すると、画像キャッシュされる可能性があります。キャッシュされている場合は事前に読み込まれ、同じ URL を参照するだけで使用できます。

キャッシュは、キャッシュの有効期限が切れるまでの画像の有効期間に関して、サーバーから返されるヘッダーの影響を大きく受けます。

于 2012-09-01T09:49:26.430 に答える
-1

私は、 Javascriptに関する問題に対して受け入れ可能な (多かれ少なかれ) 解決策を見つけました: Cancel/Stop Image Requestsを次のように適用しました。

var img = new Image();
img.src = "IMG_0111.JPG";
var timer = setTimeout(function(){
        window.stop();
        document.execCommand("Stop", false);                                            
    },50);

これにより、探していた結果が得られますが、他のすべての HTTP 要求も終了してしまうのではないかと心配しています。

于 2012-09-01T10:29:34.393 に答える