Google app engine 能否在浏览器中重新打开GAE频道而不泄漏内存?

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”只是服务器上的一个处理程序,它

我似乎无法在没有内存泄漏的情况下重新打开浏览器中的频道。该频道的dev_appserver版本没有泄漏

js似乎创建了一个iframe,然后为每个频道加载更多的javascript。当重新创建通道时,看起来旧的iframe已从DOM中删除,并创建了一个新的iframe

然而,旧的iframe仍然作为一个“分离的DOM树”挂起,连同window对象和它包含的所有代码一起挂起,每个通道加起来大约1MB

我试图构建一个简化的示例来演示这种行为。“/newtokenapi”只是服务器上的一个处理程序,它创建一个新通道并返回一个json编码的令牌

<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代码,其中包含一个变量,而您无权访问该代码。不管怎样,现在应该修好了。