我有一个应用程序,它经常(至少每帧一次)通过WebSocket接收二进制消息并绘制数据,使用canvas/webgl。我注意到我的内存占用呈锯齿状;有很多短暂的数据块。
这不让我感到惊讶,因为我每16ms至少从onmessage
接收一个对象,并用于绘图,然后取消引用。
我的问题是:有没有什么方法可以避免/最小化这种情况?根据WebSocket API,似乎没有替代方案可以在每个套接字接收调用时分配新的内存。在另一种语言/环境中,我会预先分配一些内存并将其接收到该缓冲区中,以避免为短暂的对象不断分配内存,但我无法想出在JavaScript中在浏览器中实现这一点的明显方法。
供参考,这是我的“Frames”视图。
我不知道那段空闲时间是否是垃圾回收?任何开发工具专家的见解都将不胜感激。
(259172488-274765862).toLocaleString()
显示了一个 15MB 的范围,对于这样一个重量级的应用程序来说其实并不算太糟糕,并且没有随时间稳步增加。总之,看起来还是很好的;Chrome 使用了相当数量的内存;即使在这个页面上也使用了64MB,因此即使有23%的波动也是有趣但不会引起警觉的,并且它也没有在每分钟做成千上万件事情... - dandavis