1

私は ng-repeat でいくつかのパフォーマンスの問題に直面しており、1000 以上<tr>のグーグル検索で、$digest サイクルを克服するには独自のディレクティブをロールバックする必要があることがわかりました。私はそれについて何をすべきか理解できませんか?誰かがこれを説明してもらえますか?どうすればパフォーマンスを改善できますか? 要件である 1000 行以上をすべて表示する必要があり、現在、テーブル全体を作成するのにほぼ 20 秒かかります。

どうもありがとう。

<tr ng-repeat="obj in objs" id="obj{{obj.id}}" ng-show="displayObj(obj)">
    <td>{{obj.objId}}</td>
    <td style="min-width: 70px;">
        <textarea rows="3" style="width: 100px" name="text" maxlength="100" ng-model="obj.text"></textarea>
    </td>
    <td><button class="btn btn-primary" ng-click="saveObj($event, obj)">Update</button></td>
</tr>

コントローラー内

$scope.saveObj = function ($event, obj) {
                console.log(deal);
                var UpdateObj = ObjService.updateObj();
                var updateObj = new UpdateObj();

                updateObj.text = obj.text;
                updateObj.$update({objId: obj.id});
            };

パフォーマンスの問題は、約 3000 の要素がある $apply に起因することに気付きました。ng-model を外すと、パフォーマンスが向上します。しかし、双方向のデータバインディングは失われます。ここでパフォーマンスを調整できる方法はありますか?

4

2 に答える 2

0

現在この問題に直面している人は、bind-once などを使用する必要があります。

一度ロードされたデータのほとんどは変更されないため、不変にすることができます。bindonce はウォッチャーをバインディングから削除して、パフォーマンスを向上させます。

非常に使いやすく、非常に優れたドキュメントがありました。

https://github.com/Pasvaz/bindonce

また、一度に 1000 行をロードしないでください。サーバー側のページネーションを実装してオンデマンドでデータをロードすることで、これを簡単に回避できます。

この記事では説明します。AngularJS のサーバー側のページネーション

于 2016-07-20T11:19:35.983 に答える