2017-07-03 8 views
1

JavaScriptを少し学び始めたばかりです。画像がキャッシュに読み込まれているかどうかを確認する方法があるかどうかは疑問でした。Javascript:画像が既にキャッシュされているかどうかを確認する方法

私のスクリプトでは、別のWebページからいくつかのランダムな画像を読み込んで表示しています。 同じ画像が2度目に表示されると、スクリプトは既に読み込まれた画像を使用せず、代わりに同じ画像を読み込んで2つの画像をキャッシュに保存します。

イメージが既にキャッシュに格納されているかどうかを確認したい場合は、イメージをキャッシュに再度格納するかどうかを確認します。

マイコード:私のキャッシュの

<script> 
    var img = document.createElement('img'); 
    var index; 

    //On Click create random 3digit number between 1 and 100 
    document.getElementById('image').onclick = function(){ 
     var index = '' + Math.floor(Math.random() * 100 +1); 

     while(index.length < 3) { 
      index = '0' + index; 
     } 

     loadImages(index); 
    }; 

    //Load the image with the created number 
    function loadImages(id) { 
     var src = 'someWebPage/' + id +'.png';    

     img.onload = function() { 
      document.getElementById('image').getContext("2d").drawImage(img, 0, 0, 300, 300); 
     } 

     img.src = src;    
    } 
</script> 

ピクチャー:

enter image description here

あなたは030.png032.pngがキャッシュに二回ある見ることができるように。

あなたは私にいくつかのアドバイスを与えることができます。

編集: この問題に直面している他の人にとっては、それは実際には1つではありません。 Chromeはすでにすべてのことを正しく行いました。 enter image description here Sizeの列にあるように、画像はすでにキャッシュから読み込まれています。

+0

https://stackoverflow.com/questions/2446740/post-loading-check-if-an-image-is-in-the-browser-cache –

+0

ブラウザはこれを内部的に処理します...あなたはそれを制御できませんキャッシュへのアクセス権がありません – charlietfl

答えて

2

キャッシュの処理方法(このコンテキストで)は、ブラウザが基本的にサーバーに「このバージョンのこのリソースを既に持っている」ことを伝えるために一連のヘッダーを使用してサーバーとネゴシエートすることによって処理されます。 "OK、それでも有効です。新しいものをダウンロードする必要はありません"。したがって、JavaScript側のキャッシュについては心配する必要はありませんが、サーバー側に正しいCache-Controlヘッダーを設定していることを確認してください。あなたのサーバ/そこにキャッシュを設定する方法の選択のフレームワークのための質問/回答はおそらくすでにあります。

+0

ありがとうございますが、キャッシュから直接画像にアクセスする方法はありますか?だから、私はこの仕事をブラウザに与える必要はなく、単に '030.png'がすでにキャッシュに存在するかどうかを確認するだけで済むでしょうか?ご協力いただきありがとうございます。 – FatTony

+0

実験的な[Cache API](https://developer.mozilla.org/en-US/docs/Web/API/CacheStorage)がありますが、プロダクションではそれを実際に使用することはできません。 *実験*。それ以外には、キャッシュにアクセスするためのAPIはありません。カスタムキャッシュ層を自分で実行することもできますが、サーバーの設定が適切であれば、ブラウザによってネイティブに処理されているものは残念です。 – vijoc

+0

Allright、これは実際のプログラムではありませんが、私自身はブラウザを使ってタンクを残しておきます。 – FatTony

関連する問題