AngularJS:在时间轴中解析 HTML 事件
Posted
技术标签:
【中文标题】AngularJS:在时间轴中解析 HTML 事件【英文标题】:AngularJS: Parse HTML events in timeline 【发布时间】:2015-10-20 06:26:32 【问题描述】:在调试我的 angularjs 应用程序的过程中,我在开发工具中发现了很多 parse html 事件。
时间线说这个事件是由jQuery.extend.buildFragment
调用的,我很难理解,是什么指令调用parse html。
我如何检测,究竟是什么导致了 parse html 事件?可能原因可能在ng-repeat
,但我不确定。
这些事件也会减慢$scope.$apply
。
【问题讨论】:
这是什么工具?也许该工具只是在解析代码行以分析它时记录? 我猜它是一个 chrome 开发工具,它只是记录浏览器事件 尝试探索调用堆栈,它在屏幕截图的底部,有趣的行被截断:( . @Andrey 当然,这是一个完整的调用堆栈i.imgur.com/Yn7NQMJ.png jquery 在这里处理数据:) @你谢谢,你是对的。像 ng-repeat 或 ng-include 这样的东西可以做到这一点。您可以发表评论作为答案,我会接受。 【参考方案1】:Angular 中的每个部分 html 都会触发 Parse HTML 事件,例如 ng-includes、ng-repeats、指令和 $digest 循环。
同样使用 jQuery 会给你很多初始化 jquery 实例的开销。当您或指令或角度调用 element.html('something tags') 时,将调用 jQuery 或 jQlite buildFragment,这反过来会写入 innerHTML,这会导致在浏览器中解析 HTML 事件,并以角度遍历这些子项以查找更多指令并编译这些指令,直到它完全的。
要最小化这些,您需要对它们进行批处理,但 Angular 的性质很难直接完成。也许您可以尝试在 Angular 1.3+ 中使用一次性绑定语法 :: 或减少观察者,这样 Angular 就不必一次又一次地解析 html。
【讨论】:
以上是关于AngularJS:在时间轴中解析 HTML 事件的主要内容,如果未能解决你的问题,请参考以下文章