angular的优化

https://github.com/atian25/blog/issues/5

更快地执行digest:

  优化watch

  $scope.$watch(watchExpression, modelChangeCallback)

  不在watchExpression中做耗时的操作(dom操作),因为watchExpression在digest中可能会执行多次

  避免深度watch(第三个参数为true),巧用watchCollection

  减少watch

  当一个dom不需要时,使用ng-if把它移除,这样会把这个dom中的所有watch都移除的,而ng-show仅仅是隐藏了dom,对应的watcher会保留

  对于不会发生变化的数据,使用bindonce库来做单次绑定,避免添加watcher,以减少watcher的数量

  当不再需要的时候,手动解除watch

var listener = $scope.$watch("quartz", function () {});
// ...
listener(); // Would clear the watch

更少地执行digest

  可以的话使用digest而不是apply,补充$applt的源码:

function $apply(expr) {
  try {
    return $eval(expr);
  } catch(e) {
    $exceptionHandler(e);
  } finally {
    $root.$digest();
  }
}

  $setTimeout中延迟执行的代码中如果不涉及到界面更新,设置第三个参数为false,不执行apply。

dom优化

  使用track by,参考:http://www.cnblogs.com/hellohello/p/8068008.html

  要修改大量的dom,在指令的compile阶段进行

原文地址:https://www.cnblogs.com/hellohello/p/8068066.html