Closed atian25 closed 5 years ago
很老的了,不适合现在
发自我的 iPhone
在 2017年8月19日,23:08,Christina notifications@github.com 写道:
比较好奇是那三本书。。
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
现在呢 老哥 继续用的1吗 还是2 或者4 了
早弃坑了,vue
发自我的 iPhone
在 2017年10月21日,17:02,Dany notifications@github.com 写道:
现在呢 老哥 继续用的1吗 还是2 或者4 了
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.
Vue 文档确实很棒
谈起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为中心
的思维,拥抱以数据为中心
的思维。参见