【问题标题】:Mouse event running very slowly鼠标事件运行非常缓慢
【发布时间】:2014-07-03 17:43:27
【问题描述】:

我们有一个带有 UI 路由器的 Angular.js 应用程序。在任何现代浏览器上,我们的应用程序都非常快。然而,在我们的一个目标设备上,视图更改太慢了(主要是因为它目前正在可怕地执行 JS - 这是我们正在修复的一个附带问题)。

我们看到的主要问题是我们有一个鼠标事件,它通过 $location.path 更改启动视图更改,并且运行时间为 250 毫秒 - 400 毫秒。

我们已经尝试了很多事情,比如放弃我们用来调用代码的 Hammer 事件、剥离应用程序以便只加载一个空白视图、删除我们拥有的所有 XHR 调用、删除 DOM 操作,以及许多其他小实验。

被调用的 jQuery 事件是 jQuery.event.add(特别是 jQuery 1.11.1 的第 4305 行)。

我们希望有人遇到过类似的问题,并且可以帮助诊断会触发过多的删除计时器事件、GC 事件、解析 HTML、请求动画帧、安装计时器和重新计算样式的原因。它们中的每一个似乎都在微秒内或最多

【问题讨论】:

  • 有什么方法可以将一些代码隔离到 JSFiddle 中,以便更容易诊断问题所在?如果大部分问题出在 jQuery.event.add 中,我会查看您可能将 eventHandler 添加到 mouseOver/mouseMove 的任何地方

标签: jquery performance angularjs mouseevent hammer.js


【解决方案1】:

问题是我提到的目标设备在我们的开发机器上运行 JavaScript 比 Chrome 慢 40 倍,比我们拥有的其他设备慢 20 倍。我们刚刚运行 SunSpder 来确定速度。

JS 引擎的缓慢实际上只会加剧这个问题。我们仍然需要做一些优化来清理这些东西: - 剥离绑定到 ng-repeat 的对象 - 将 bindonce 与 refresh-on 放在适当的位置(我们已经有很多 bo-text,我们只需要刷新的能力)

现在该应用的延迟要少得多。

Estaban,很抱歉没有发布代码,感谢您的回复。要解开我们需要呈现清晰画面的工作量太大了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 2021-05-16
    相关资源
    最近更新 更多