不知道我理解你的问题,但你可以在任何其他语言声明全局阵列状,并用它作为循环缓冲器,例如:
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
你希望实现什么?程序运行多长时间,一致的长期性能有多重要?看到一些代码或代码示例会很棒 –