SF.*_*SF. 2 javascript memory-leaks postmessage
我有一个页面可以作为一个独立的网页或在一个特殊的“看门狗框架”中工作,它将定期使用 window.top.postMessage('message', '*');
问题是,如果页面作为独立网页加载,将无法捕获这些消息。用户可能会一次打开该页面数小时甚至数天。
这些未捕获的消息是否会消失得无影无踪,或者它们是否被排队或类似的事情导致内存泄漏?
postMessageMessageEvent对目标发起 a ,这并不比常规onload事件更特殊。
该事件本身不会导致任何内存泄漏。您可以通过引入不需要的闭包来造成内存泄漏,但这也适用于常规函数:
window.addEventListener('message', messageHandler, false);
function messageHandler(event) {
var img = new Image();
img.onload = function() {
document.body.appendChild(img);
};
img.src = event.data.some.property.deep.ly.nested.obj.bad.coding.style.src;
}
Run Code Online (Sandbox Code Playgroud)
有什么问题?图像的onload处理程序在加载时将图片插入到文档中。但是因为闭包,event对象不能被释放,大event.data对象还是会占用内存。
另一种引入内存泄漏(仅同源)的方法是保存event.source(防止框架的视图在框架被移除时被 GC 处理)的值:
var stupidity = [];
window.onmessage = function(event) {
stupidity.push(event.source);
};
Run Code Online (Sandbox Code Playgroud)