gpt4 book ai didi

javascript - 未处理的 postMessage 会泄漏内存吗?

转载 作者:行者123 更新时间:2023-11-30 10:32:34 27 4
gpt4 key购买 nike

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

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

这些未捕获的消息是消失得无影无踪,还是排队等候,泄漏内存?

最佳答案

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 的值(防止框架的 View 在删除框架时被 GC 处理):

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

关于javascript - 未处理的 postMessage 会泄漏内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16031442/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com