2017-11-03 22 views
0

私はいくつかのライブカメラのフィードを持つ内部サイトを表示するためにFirefoxを実行している低メモリデバイス(いくつかの格安Windowsタブレット)を持っています。サイトはFirefoxをクラッシュさせ続けており、それはブラウザがそれぞれ作成したすべてのBlobを保存しているためと思われる。また Sources Tab in Chromeブラウザがブロブを保存しないようにするにはどうすればいいですか?

のスクリーンショット:添付

setInterval(function() { 
    if (frontShown) { 
     fetch('http://192.168.7.2:888/image/Main').then(function (response) { 
      return response.blob(); 
     }).then(function (myBlob) { 
      var objectURL = URL.createObjectURL(myBlob); 
      FrontDoorVideo.src = objectURL; 
     }); 
    } else { 
     fetch('http://192.168.7.2:888/image/Back').then(function (response) { 
      return response.blob(); 
     }).then(function (myBlob) { 
      var objectURL = URL.createObjectURL(myBlob); 
      BackDoorVideo.src = objectURL; 
     }); 
    } 
}, 500); 

はクロームデベロッパーツールでソース]タブを埋めるBlobsのスクリーンショットです:以下は、私はそれが最新のフレームにいくつかのサーバーをつかんされている区間がありますネットワーク]タブ:

Network Tab in Chrome

どのように私はこれらのブロブの全てをキャッシュからブラウザを防ぐのですか?私は、新しいフェッチごとにキャッシュから削除するサービスワーカーについて考えていました。

+0

を、あなたのサーバが応答してキャッシュなしヘッダを送信設定する必要があります。 GCがBLOBのデータを収集するようにすると、BLOBURIは不要になった時点で取り消されます。しかし、実際には、なぜBlobとしてリソースを取得するのですか? mjpegストリームを送信していて、 ''タグでストリーム自体を処理させると、必要でないものはロードされません。 – Kaiido

+0

サーバーが送信するヘッダーを制御しないため、キャッシュヘッダーを送信できません。だから私は 'src'をURLにまっすぐに設定しようとしましたが、デスクトップのChromeでは動作しましたが、WinBookタブレットでは画像はキャッシュされて更新されませんでした。 – GPinskiy

+0

しかし、これらの画像はipカメラから来ていますか?あなたはそれとそのサーバー上のコントロールを持っている必要があります、そうでなければそれを放棄してください、それはあなたの私生活の巨大な穴です。ボンネットの下では、おそらく[モーション](http://htmlpreview.github.io/?https://github.com/Motion-Project/motion/blob/master/motion_guide.html)のようなものを使用して静止画像を生成しますあなたは得る。デフォルトでは、これらのカムのほとんどは、ブラウザごとに1つの[mjpeg](https://en.wikipedia.org/wiki/Motion_JPEG)ストリームを生成し、ブラウザはそのままでレンダリングできます。 setIntervalまたはfetchを実行します。 – Kaiido

答えて

1

主な問題は、Object-URLが取り消されるまでObject-URLがメモリ内に保持されることです。

はやってみます

var objectURL = URL.createObjectURL(myBlob); 
FrontDoorVideo.onload = revokeURL; // add onload handler before src 
FrontDoorVideo.src = objectURL; 

そして、共通のハンドラを使用します。httpキャッシュを回避するために

function revokeURL() { 
    URL.revokeObjectURL(this.src);  // remove URL reference 
} 
+0

これを試しましたが、SourcesタブにはまだBlobがいっぱいになっています。私はハンドラにブレークポイントを追加し、URLは正しいと思われ、 'Blobs'と一致しますが、まだ削除されません。 [MDN](https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL)のドキュメントを理解しているので、実際には削除されません。それはオブジェクトをガベージコレクタブルとしてマークするだけですが、GCはまだそれを削除する必要がありますか? – GPinskiy

+0

@GPinskiyはい、GCはそれを収集/除去する必要があります。それはあまりにも多くの時間を取るべきではありません。コンソールでPerformanceレコーダーを使用して、GCが時間の経過とともに収集するかどうかを確認しましたか?元のBLOBへの参照を保持する質問に表示されていない他の参照はありますか? – K3N

+0

ここ以外の場所にはBLOBへの参照はありません。パフォーマンスレコーダーに関しては、私はそれを使用しましたが、私は何を見ているのか分かりません。この例で私にとって役に立つ前にそれを読む必要があります。 – GPinskiy

関連する問題