javascript – 当将新数据加载到$scope时,AngularJS应用程序会冻结

这可能是一个难以回答的问题,因为我不确定这里的根本问题是什么,如果有人想看看会很感激.

http://threadfinder.net/search%3FnameTags=jacket/0

如果您不断向下滚动,使用ngInfiniteScroll和此功能加载更多项目:

$scope.moreProducts = function() {
        if ($scope.busy || $scope.noMore){return;}
        else 
        if (!($scope.busy)) {
            $scope.busy = true;
            $scope.itemsLoaded += 27;
            var theQuery = $routeParams.query.replace(/\?|%3f/gi, '');
            $scope.itemSearch.get({
                query: theQuery,
                page: $scope.itemsLoaded
            }, function(data) {
                if (data.posts.length <= 0) {
                    $scope.noMore = true;
                } else {
                    $scope.noMore = false;
                    for (var i = 0; i < data.posts.length; i++) {
                        if ($scope.user) {
                            if (!($scope.user.likes.indexOf(data.posts[i]._id) === -1)) {
                                data.posts[i].liked = 'http://i.imgur.com/CcqoATE.png';
                            } else {
                                data.posts[i].liked = 'http://i.imgur.com/tEf77In.png';
                            }
                            $scope.posts.push(data.posts[i]);
                        }
                    }
                    $scope.busy = false;
                }
            });
        }
    }

(我正在使用AngularJS Deckgrid进行磁贴布局,但我尝试禁用它,并且性能没有太大变化.)

如果你继续滚动,在页面上加载约300个项目后,性能开始受到影响,应用程序会在新项目加载到范围时冻结.

我理解也许这只是一个事实,加载所有这些数据会占用大量的页面 – 每加载27个项目(一个infiniteScroll GET调用),加载的数据总重量约为30kb pop,所以在大约300个项目中,范围内有大约900kb的数据.这个数据尽量少(约500行JSON).

问题是:

在$scope中加载大量数据时,AngularJS是否有任何建议,插件,指令或最佳使用方法

为了澄清,该应用程序构建在Node / Expressjs / MongoDB上

编辑:我已经在两台计算机上检查了这个问题(两者都在OSX上),这个问题在Chrome中比在Safari中更为普遍.在加载数据时,Chrome完全错开,Safari非常流畅,只有当你获得600件物品时才会有任何明显的延迟,即便如此,它也远不及Chrome那么糟糕.

解决方法:

我看了一下AngularJS Batarang页面,看来你的应用程序在摘要周期中花了很多时间.如果您在UI延迟期间查看Chrome的“时间轴”面板,则可以看到以下内容

(full size)

大部分时间花在很多“解析HTML”上.一个快速谷歌搜索出现了this Stack Overflow question,其中有一些可能有用的答案;特别是,关于手动字符串连接的小组帖子值得在这里尝试.您还可以考虑通过小批量向作用域添加新项目(可能使用$evalAsync或一些计时器)来尝试将HTML解析的大块分解为更小的块,以查看是否有帮助.

相关文章

MongoTemplate 是Spring Data MongoDB 中的一个核心类,为 S...
笔者今天要分享的是一个项目重构过程中如何将数据库选型由原...
mongodb/mongoTemplate.upsert批量插入更新数据的实现
进入官网下载官网安装点击next勾选同意,点击next点击custom...
头歌 MongoDB实验——数据库基本操作
期末考试复习总结