javascript - 调试 AngularJS Internet Explorer 锁定

标签 javascript jquery angularjs performance internet-explorer

我遇到了一个 IE10 问题,我可以很容易地复制它。在我的应用程序中跳转几页后,IE 完全锁定(没有“长时间运行的脚本”警告,只是完全卡住)。我必须从任务管理器中将其杀死。我已经禁用了所有附加组件并且有了一个干净的石板。我在一个相当大的工作站上运行(Win7、16GB 内存、i7、yadda yadda)。

它不会在 Chrome 或 Firefox 中卡住。仅限 IE10 和 IE11。

关于我的应用

我正在与一个工业控制系统集成以显示我的系统的事件状态。我有很多 XHR 轮询正在进行(将转移到 WebSocket,但现在,这很容易与我的 API 集成)。每 500 毫秒从端点刷新数据,这会更新页面上的一堆字段。

当应用程序未卡住时,导航起来既美观又快捷。找不到导致卡住的任何特定条件。

在任何给定时间,我的应用程序都有 75 到 400 个 $watches(使用 this answer 计算)。

目前正在运行 AngularJS v1.3.0-rc.4。在 1.2.25 上有类似的锁定。

那么,我的问题

我该如何调试呢?我试过让 F12 开发人员工具保持打开状态,但没有任何内容输出到控制台。运行脚本分析器(Batarang 在 IE 中不可用)显示我在 $digest 中每 10 秒花费大约 200 毫秒(含)。接下来我该尝试什么?

最佳答案

哎呀,我能感同身受。

你能把关注点分开吗?使用不使用 XHR 的模拟服务测试您的前端(带有 ng-repeat 的 DOM 部分),看看您是否遇到同样的问题。您还可以尝试测试 XHR 服务而不将其挂接到您的前端。 (例如,为了测试目的,您可以有一个只有类似 <span>{{myDataArray}}</span> 的测试 View ,以避免 ng-repeat 问题。)基本上,尝试将问题分成两半,看看您是否仍然可以重现该问题.

基本上,我的推理是这样的;如果您模拟您的服务并且仍然每 500 毫秒轮询一次,并且您遇到了问题,那么您可能遇到了 IE 的 DOM 更新问题。如果您没有遇到问题,但您测试了真正的服务并且 IE 卡住,那么 XHR 某处有问题(也许是您的轮询时间?)或者 Angular 的监视系统可能有问题。

我希望我能在这里提供更多帮助,但这就是我要开始的地方。尝试通过剔除一些代码来缩小问题范围。这不会很有趣,但如果您使用 Angular 的最佳实践(即依赖注入(inject)和关注点分离)编写应用程序,它就会不那么痛苦。

TL;DR - “接下来我该尝试什么?”您将不得不开始智能地剔除一些代码,以查看哪些有效,哪些无效。

关于javascript - 调试 AngularJS Internet Explorer 锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26237814/

相关文章:

javascript - jQuery If 语句问题

javascript - Angularjs 和 ui-router,在浏览器刷新时刷新所有父状态

javascript - ng-click inside 指令不起作用

javascript - 两层应用程序中的 Sails.js socket.io。如何定义连接选项?

javascript - 使用 jquery 定位与 <li> 内的类的链接

javascript - Angularjs-如何在 ng-repeat 中重复 tr

服务器上的 Javascript 安全性

javascript - 重置 setInterval() 的定时器

javascript - 创建元素 ID "on the fly"在 jQuery 中不起作用

javascript - Angular 表单未提交