不知道我理解你的問題,但你可以在任何其他語言聲明全局陣列狀,並用它作爲循環緩衝器,例如:
var buffer = [];
var bufferLength = 1000;
var start = 0;
var end = 0;
var content = 0;
socket.onmessage(function(msg) { //msg allocated
end %= bufferLength;
if (end == start && content != 0)
console.log("Buffer is full");
else {
content++;
buffer[end++] = msg; //reference to msg saved so it's not destroyed at the end of the callback
}
});
function getNext() {
start %= bufferLength;
if (start == end && content == 0)
console.log("Buffer is empty");
else {
content--;
return buffer[start++]; // returns reference to next msg
}
}
編輯:我修改的答案更明確了存儲週期:
JS將分配上的WebSockets接收到的信息存儲和將創建一個參考,以它叫msg
,將給予您在用於onmessage
定義回調設置了一個param。
注意JS GC只會在代碼中不再引用它時才銷燬該內存塊。
上面我做的是將該引用保存在緩衝區中,以便在回調完成後該值不會被破壞,您可以稍後使用getNext
訪問它。你不需要分配新的內存,因爲JS爲你做了。
如果您想克隆或創建msg
的不同副本,則有一些不同的選項。一個簡單的選擇,讓你克隆非圓形的JSON對象是:
var newJSON = JSON.parse(JSON.stringify(msg));
您可以找到有關JS在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
你有任何的代碼示例分配內存的更多信息?開始了什麼?一把小提琴? – Anonymous0day
我在WebSockets上從我的樹莓派流式傳感器日期有同樣的問題。恐怕有,並且將無法干擾JavaScript中的WebSockets的內存分配。我的研究沒有帶來任何結果。 – windm
你希望實現什麼?程序運行多長時間,一致的長期性能有多重要?看到一些代碼或代碼示例會很棒 –