gpt4 book ai didi

javascript - AJAX引起的 "A script on this page is causing IE to run slowly"故障排除方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:52:39 25 4
gpt4 key购买 nike

我的应用程序中有一个页面每 10 秒从服务器刷新一些内容(当前登录的用户列表)。此数据是使用 Ajax 加载的来自 mootools framework 的类(class),特别是 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 没有这个问题)显示以下弹出窗口:

Stop running this script?
A script on this page is causing Internet Explorer to run slowly. If it continues to run, your computer may become unresponsive.

现在,在我看来,这可能是由 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 监听器以调用垃圾收集方法来解决此问题的代码 - 但这似乎解决了问题的症状而不是问题的根源问题本身。

最佳答案

这可能是 IE 中的内存/资源泄漏。其中最常见的来源是代码或框架代码中的闭包。我总是检查我的 javascript 框架的问题跟踪器是否有报告的错误。很多次我都被其他用户的错误报告和修复所拯救。

要尝试跟踪问题,您可以尝试类似 ie leak detector 的方法.有一个优秀的msdn article这也解释了 IE 内存泄漏的理论。

泄漏的一个丰富来源是事件处理程序,您确实需要阅读 MSDN 文章才能理解这一点。这些通常会造成您类型的泄漏,因此考虑取消注册任何事件处理程序可能是个好主意。

我必须承认,每 10 秒连续重新加载一个小时听起来相当不错;我不确定您是否应该期望 IE 变得更好(也许有点偏低,但仍然如此)。您可能需要调整您的期望,或者至少设定一个在单个版本的 IE 上运行得更好的目标。

Re 期望:对于“通用”版本的 IE,有太多不同的版本和太多不同的错误,您可以针对在所有这些版本上长期运行的应用程序实现 100% 的稳定性。所以至少在最初我认为选择特定版本作为目标是明智的。

关于javascript - AJAX引起的 "A script on this page is causing IE to run slowly"故障排除方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/389451/

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