未处理的postMessage泄密内存?

时间:2013-04-16 07:46:06

标签: javascript memory-leaks postmessage

我有一个页面可以作为一个独立的网页,或者在一个特殊的“看门狗框架”内,它会定期使用window.top.postMessage('message', '*');

发送消息

问题是,如果页面作为独立网页加载,则无法捕获这些消息。用户可以预期该页面一次打开几小时甚至几天。

这些未被捕获的消息是否会在没有任何痕迹的情况下消失,或者它们是否排队等等,泄漏了内存?

1 个答案:

答案 0 :(得分:4)

postMessage在目标上发起MessageEvent,这不比常规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;
}

有什么问题?图像的onload处理程序在加载时将图片插入文档中。但是,由于关闭,无法释放event对象,并且大event.data对象仍将占用内存。

引入内存泄漏的另一种方法(仅限同源)是保存event.source的值(防止帧移除时帧的视图被GC'd):

var stupidity = [];
window.onmessage = function(event) {
    stupidity.push(event.source);
};