嗯,我運行到一個奇怪的錯誤,而編程是通過WebSockets將其從服務器接收圖像,Web應用程序後創建圖像斑點的的ObjectURL錯誤。服務器每秒向瀏覽器發送大約8個圖像(.bmp)。每張圖片的大小約爲300KB。那大概是2.4Mbps。瀏覽器上拋出耗費大量內存
瀏覽器接收到的圖像以二進制的blob:
//WebSocket
var ws = new WebSocket("ws://192.168.0.10:1337");
//Image
var camImg = new Image();
ws.onmessage = function(msg)
{
var data = msg.data;
// handle binary messages from server
if (data instanceof Blob) camImg.src = window.URL.createObjectURL(data);
};
camImg.onload = function()
{
//draw image to canvas
canvasCont2D.drawImage(this,0,0);
//request next frame
ws.send("give me the next image!");
//delete ObjectURL
window.URL.revokeObjectURL(this.src);
};
所以直到此時一切都正常運行。現在我來解決第一個問題: 正如我在Chrome中測試的那樣,我在TaskManager中看到了這個編碼需要多少資源。我看到有一個啓動於大約90MB內存的Chrome進程。每秒鐘都增加2.4MB。所以它看起來像我收到的每一個圖像留在內存中。有沒有可能防止這種情況?順便說一下,Chrome開發人員工具中收到的blob似乎仍然處於資源狀態。
無論如何,這個問題導致我到第二個:這個過程的內存消耗上升和一段時間後約400-500MB其刷新和再次開始在90MB,再次上升。這麼久,它只是一個記憶問題。但有時候可能會發生,內存不會被刷新並上升到大約600MB。在這一點上,我沒有收到任何新的形象。控制檯顯示一個錯誤,指出:
無法加載資源:
:服務器與404(未找到)camImg.src = window.URL.createObjectURL(data);
在此行中會出現此錯誤狀態迴應
目前我通過捕獲錯誤事件來解決此問題:
camImg.onerror = function()
{
//request next frame anyway and wait for memory flush
ws.send("give me the next image!");
};
因此,我只是請求新圖像,因爲一段時間後內存再次被刷新(幾秒鐘後),我可以收到新的圖像。
同樣的問題(S)occure使用Opera爲好。我猜想它主要是一個內存消耗的問題。也許在瀏覽器中的錯誤?或者我做了一個大的編程錯誤?
我會是因爲我沒有留下任何想法幫助非常感激,這可能是造成這個問題...
這裏的鉻問題https://code.google.com/p/chromium/issues/detail?id=392161 – Kiril