$ Digest的AngularJS性能问题

时间:2017-01-10 18:51:57

标签: angularjs

情景:

ng_click上,我在其AngularController中调用一个函数,该函数在其内部调用AnguarService中的函数,这是在进行Webservice调用并获取大小为2MB的Json对象。此响应用于使用 dir-paginate 绑定视图上的数据,如下所示

dir-paginate="item in results | orderObjectBy: predicate : reverse | filter : myFilter  | itemsPerPage: pageSize   track by $index"

当控件试图退出AngularController中的函数时,下面是调用堆栈,$ digest需要14秒才能完成执行。

致电堆栈:

(anonymous) (MyAppcontroller.js?v=v1.0.0.0:479)
(anonymous) (angular.min.js?v=v1.0.0.0:131)
$eval (angular.min.js?v=v1.0.0.0:145)
$digest (angular.min.js?v=v1.0.0.0:142)
$apply (angular.min.js?v=v1.0.0.0:146)
l (angular.min.js?v=v1.0.0.0:97)
J (angular.min.js?v=v1.0.0.0:102)
t.onload (angular.min.js?v=v1.0.0.0:103)
上面堆栈中的

$digest需要14秒。我无法弄清楚如何优化它。

我的代码非常简单。

例如,我在上面提到的MyController中的函数是:

$scope.getData = function(Id)
{
    MyService.getResponse(Id)
    .then(function(response) 
        {
            $scope.results = response;
        },
        function(message) 
        { 
            $scope.errorMessage = "Error Message";
        });
}

2 个答案:

答案 0 :(得分:0)

您需要显示您的代码。这个问题可能会发生,因为你的html绑定,一些js函数调用for循环/ ng-repeat,或者一些显式调用方法scope.apply()。

无论如何,我遇到了这样的问题,我按照这个链接来解决。

https://www.alexkras.com/11-tips-to-improve-angularjs-performance/

答案 1 :(得分:0)

如果你有2MB的json文本响应,你可能做错了。但是,假设你做得很好......

可行的解决方案:

  • 如果可能,请在多个请求中拆分json。
  • 使用WebWorker处理json,同时渲染角度,这样就可以避免阻止视图渲染过程。