我的应用程序中有一个页面,它每 10 秒从服务器刷新一些内容(当前登录的用户列表)。该数据是使用mootools 框架中的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 引擎在幕后做了什么的最佳方法是什么?有没有可能的方法来确定我的任何一个假设是否正确?
我在一个类似的问题中看到,有人建议使用 IBM Page Profiler 来调试这个问题。我已经尝试使用 Page Profiler 并没有取得太大的成功 - 如果您在页面的初始加载时遇到问题(分析哪个组件导致过度加载延迟),它似乎很有用,但它似乎没有能够分析在页面完全加载后在页面内运行的 Javascript 发生了什么。我在 Page Profiler 中看到每 10 秒请求一次对 xmldata.jsp 的异步调用,但 Page Profiler 仅显示服务器响应正常(大约 600 毫秒),但不了解父页面的脚本如何使用此数据。
此外,在自关闭的 mootools 讨论列表上的这篇文章中,有人建议删除注册unload
侦听器以调用垃圾收集方法来解决此问题的代码 - 但这似乎解决了问题的症状,而不是问题本身.