【发布时间】:2008-12-23 17:06:39
【问题描述】:
我的应用程序中有一个页面,它每 10 秒从服务器刷新一些内容(当前登录的用户列表)。该数据是使用来自mootools framework 的Ajax 类加载的,特别是使用如下所示的Javascript:
var xmldata = (function() {
new Ajax('xmldata.jsp?time='+$time(), {method: 'get', onComplete: dataLoaded, autoCancel: true}).request();
}).periodical(10000);
(每 10 秒创建一个 Ajax 对象并调用它的 request() 方法,完成后将调用 dataLoaded() 方法)。
如果用户让他们的浏览器窗口打开这个页面大约 45-60 分钟,那么尝试在其他地方导航将导致 IE(v7 肯定,v6 也我相信,Firefox 或 Chrome 没有这个问题)显示以下弹出窗口:
停止运行此脚本?
此页面上的脚本导致 Internet Explorer 运行缓慢。 如果它继续运行,您的计算机可能会变得无响应。
现在,在我看来,这可能是由 mootools 框架中的底层脚本中的某种泄漏引起的 - 太多的 Ajax.request() 调用正在排队等待调用,或者某些对象没有被正确清理,即使框架应该有一些垃圾收集功能。
分析 IE 的 Javascript 引擎在幕后所做的工作的最佳方法是什么?有什么方法可以确定我的任何一个假设是否正确?
我在a similar question、someone suggested 中看到使用 IBM Page Profiler 调试此问题。我已经尝试使用 Page Profiler 并没有取得太大的成功 - 如果您在页面的初始加载时遇到问题(分析哪个组件导致过度加载延迟),它似乎很有用,但它似乎没有能够分析在页面完全加载后 内运行的 Javascript 发生了什么。我在 Page Profiler 中看到每 10 秒请求一次对 xmldata.jsp 的异步调用,但 Page Profiler 仅显示服务器响应正常(大约 600 毫秒),但不了解父页面的脚本如何使用此数据。
此外,in this post 在自关闭的 mootools 讨论列表中,有人建议删除注册 unload 侦听器以调用垃圾收集方法来解决此问题的代码 - 但这似乎解决了问题而不是问题本身。
【问题讨论】:
标签: javascript ajax internet-explorer mootools