Google app engine 能否在浏览器中重新打开GAE频道而不泄漏内存?
我似乎无法在没有内存泄漏的情况下重新打开浏览器中的频道。该频道的dev_appserver版本没有泄漏 js似乎创建了一个iframe,然后为每个频道加载更多的javascript。当重新创建通道时,看起来旧的iframe已从DOM中删除,并创建了一个新的iframe 然而,旧的iframe仍然作为一个“分离的DOM树”挂起,连同window对象和它包含的所有代码一起挂起,每个通道加起来大约1MB 我试图构建一个简化的示例来演示这种行为。“/newtokenapi”只是服务器上的一个处理程序,它创建一个新通道并返回一个json编码的令牌Google app engine 能否在浏览器中重新打开GAE频道而不泄漏内存?,google-app-engine,channel-api,Google App Engine,Channel Api,我似乎无法在没有内存泄漏的情况下重新打开浏览器中的频道。该频道的dev_appserver版本没有泄漏 js似乎创建了一个iframe,然后为每个频道加载更多的javascript。当重新创建通道时,看起来旧的iframe已从DOM中删除,并创建了一个新的iframe 然而,旧的iframe仍然作为一个“分离的DOM树”挂起,连同window对象和它包含的所有代码一起挂起,每个通道加起来大约1MB 我试图构建一个简化的示例来演示这种行为。“/newtokenapi”只是服务器上的一个处理程序,它
<html>
<head>
Dine-O Test Page
</head>
<body>
<h1>Test</h1>
<script type="text/javascript" src="/_ah/channel/jsapi"></script>
<script>
var token, channel, socket, oReq;
function onOpen(e) {
console.log("socket opened!");
}
function onError(e) {
console.log("socket error!");
}
function onClose(e) {
console.log("socket closed!");
newChannel();
}
function newChannel() {
oReq = new XMLHttpRequest();
oReq.open("GET", "/newtokenapi", true);
oReq.onload = function (e) {
token = JSON.parse(oReq.response)["token"];
channel = new goog.appengine.Channel(token);
socket = channel.open();
socket.onopen = onOpen;
socket.onerror = onError;
socket.onclose = onClose;
}
oReq.send();
}
newChannel();
setInterval(function () {
console.log("forcing socket close");
socket.close();
}, 30000);
</script>
</body>
</html>
Dine-O测试页
试验
var令牌、通道、套接字、oReq;
功能开启(e){
日志(“套接字已打开!”);
}
函数onError(e){
日志(“套接字错误!”);
}
函数onClose(e){
日志(“套接字已关闭!”);
newChannel();
}
函数newChannel(){
oReq=新的XMLHttpRequest();
oReq.open(“GET”,“/newtokenapi”,true);
oReq.onload=函数(e){
token=JSON.parse(oReq.response)[“token”];
通道=新的goog.appengine.channel(令牌);
socket=channel.open();
socket.onopen=onopen;
socket.onerror=onerror;
socket.onclose=onclose;
}
oReq.send();
}
newChannel();
setInterval(函数(){
日志(“强制套接字关闭”);
socket.close();
}, 30000);
我认为我的代码中没有内存泄漏(你能找到吗?),这表明它在channel.js代码(或随后下载的代码)中
有人能解决这个问题吗?我正在尝试构建一个可以打开数周的页面,而这个漏洞肯定会在一段时间后使平板电脑浏览器崩溃。这是GAE通道API Javascript中的一个bug。 显然它现在已经修好了,但我还没有验证
dragonx有任何进展/解决方法吗?有可能隐藏旧iframe吗?我不这么认为,至少第三方代码没有。它已从dom中删除,因此您无法获取它。它是一些javascript代码,其中包含一个变量,而您无权访问该代码。不管怎样,现在应该修好了。