sel*_*ary 9 javascript http digest angularjs
angular的$http服务正在触发$digest每一个get(如果没有$digest已经运行):
if (!$rootScope.$$phase) $rootScope.$apply();
Run Code Online (Sandbox Code Playgroud)
除了从我们的API中获取对象之外,我们的应用程序还有许多指令templateUrl- 通过角度使用获取$http.这会导致数以百计的$digest冷启动循环.
注释出上述线,减少的数量$digest的循环至约3,和应用程序运行MUCH快,没有破碎的绑定(至少由于$http不触发$digest).
有没有办法禁用$ http触发$ digest?
可能无法直接执行您想要的操作,但您可以限制这些摘要周期的影响。尝试<div ng-if="everythingLoaded">在页面的大部分区域放置 a ,并everythingLoaded在所有$http调用完成后设置为 true 。
例如:
var p1 = $http.get(...);
var p2 = $http.get(...);
Promises.all([p1, p2]).then(function() {
$scope.everythingLoaded = true;
});
Run Code Online (Sandbox Code Playgroud)
摘要循环仍将运行,但速度会快得多,因为这ng-if将消除对 DOM 和大部分控制器的影响,直到条件成立为止。
我非常确定使用模板缓存将解决模板加载问题,假设它在最近的 Angular 版本中仍然是一个问题。
| 归档时间: |
|
| 查看次数: |
1056 次 |
| 最近记录: |