Closed atian25 closed 5 years ago
赞赞赞!
mark!!
赞,谢谢分享!
赞
zan
马克后看,赞!
Nice
mark
mark
mark
Nice!
mark
mark
mark
赞
Mark!
赞!
赞!
新人学到了许多。非常感谢
very good thanks
学习了~
多谢,很好
good, mark
mark
Thank you
@changwei0708 我只能呵呵了... 自己看正文里面的那些图片, 就是我这边九游的应用的截图.
正妹 @RubyLouvre 你这事做的太不地道了吧, 全文转载我的, 还不注明出处.
去博客园举报他
我想起了当年知乎约战的事情
@changwei0708
知道为何很多地方都写着出处么? 因为它来源自我之前在多看上的读书笔记
参考《mastering web application development with angularjs》 P314
@RubyLouvre 怎么看?
@RubyLouvre 怎么看?
@RubyLouvre 怎么看?
@atian25 看到楼上的@我就放心了
@diamont1001 @willworks 不要啊,闹着玩的
不嫌事大。。。
看不太懂了。。这个发布时间,,,
感觉有好戏了 :smile:
@zhanglun 因为原文在这里,后面才迁移到 issue, https://github.com/atian25/atian25.github.io/blob/master/2014/05/09/angular-performace/index.html
什么事,我从是一个到处飘着广告的网站中搬过来的。不知原作者啊。
恩,我相信 @RubyLouvre 这点素质还是有的
我可以将你这个地址 加到我博文中
@RubyLouvre 好吧~ 注明下吧, 不然哪天我又被你的粉丝纠正了~
原来是偷的别人的赃物。。。
原来不知原作者就可以当做自己的东西发布了,厉害。这个借口可以用一辈子。
我觉的就算是到处飘着广告的网站也还是得贴上那个网站地址。。
我不太明白为什么明明是转载也不标明非原创。。。
mark
受教了,还是感谢下。。。
ps:下面一堆大神出没。。。
mark
比较好奇是哪三本书。。
谈起angular的
脏检查机制(dirty-checking)
, 常见的误解就是认为: ng是定时轮询去检查model是否变更。 其实,ng只有在指定事件触发后,才进入$digest cycle
:ng-click
)$http
)$location
)$timeout
,$interval
)$digest()
或$apply()
传统的JS MVC框架, 数据变更是通过setter去触发事件,然后立即更新UI。 而angular则是进入
$digest cycle
,等待所有model都稳定后,才批量一次性更新UI。 这种机制能减少浏览器repaint次数,从而提高性能。避免深度watch, 即第三个参数为true
减少watch的变量长度 如下,angular不会仅对{% raw %}
{{variable}}
{% endraw %}建立watcher,而是对整个p标签。 双括号应该被span包裹,因为watch的是外部element{% endraw %}
$apply vs $digest
$digest cycle
, 并从$rootScope开始遍历(深度优先)检查数据变更。$timeout
里面延迟执行。$apply
。$evalAsync
vs$timeout
$evalAsync
, 会在angular操作DOM之后,浏览器渲染之前执行。$evalAsync
, 会在angular操作DOM之前执行,一般不这么用。$timeout
,会在浏览器渲染之后执行。优化ng-repeat
限制列表个数
$scope.dataList = convert(dataFromServer)
使用 track by
刷新数据时,我们常这么做:
$scope.tasks = data || [];
,这会导致angular移除掉所有的DOM,重新创建和渲染。 若优化为ng-repeat="task in tasks track by task.id
后,angular就能复用task对应的原DOM进行更新,减少不必要渲染。 参见:http://www.codelord.net/2014/04/15/improving-ng-repeat-performance-with-track-by使用单次绑定
我们都知道angular建议一个页面最多2000个双向绑定,但在列表页面通常很容易超标。 譬如一个滑动到底部加载下页的表格,一行20+个绑定, 展示个100行就超标了。 下图这个只是一个很简单的列表,还不是表格,就已经这么多个了: 但其实很多属性显示后是几乎不会变更的, 这时候就没必要双向绑定了。(不知道angular为何不考虑此类场景) 如下图,改为bindonce或angular-once后减少了很多:
update: 1.3.0b10开始支持内建单次绑定, {% raw %}
{{::variable}}
{% endraw %} 设计文档:http://t.cn/RvIYHp9 commit: http://t.cn/RvIYHpC 目前该特性的性能似乎还有待优化(2x slower)慎用filter
在$digest过程中,filter会执行很多次,至少两次。 所以要避免在filter中执行耗时操作。
可以在controller中预先处理
慎用事件
$broadcast
会遍历scope和它的子scope,而不是只通知注册了该事件的子scope。$emit
, 参见https://github.com/angular/angular.js/issues/4574directive
以DOM为中心
的思维,拥抱以数据为中心
的思维。参见