5

アプリケーションで重大なパフォーマンスの問題が発生しています。angular と ng-grid を使用しています。私のアプリが遅い理由を読んだ後、潜在的な Angular パフォーマンスの問題を克服するためにbindonceディレクティブを使用するように指示されました。

そこで、ソリューションに bindonce.js を追加し、モジュールにディレクティブを挿入しました

HomeIndexModule = angular.module("HomeIndexModule", ['ngGrid', 'pasvaz.bindonce']);

そして、私はマークアップで以下のように使用しています

<div class="gridStyle " bindonce data-ng-grid="gridOptions"></div>

これが実際にグリッドのバインドを解除しているかどうかはわかりません。

質問 1: bindonce Web サイトで ng-repeat の例のみを見つけることができたので、このプロセスを経験した人はいますか?

質問 2: bindonce が実際に機能しているかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

4

私はこれを他の投稿で2回言及しました.私bind-onceは小さくて完璧な仕事をする独自のディレクティブを作成しました.個人的には、プラグインは複雑すぎると思います.

これをチェックしてください

app.directive('bindOnce', function() {
    return {
        scope: true,
        link: function( $scope ) {
            setTimeout(function() {
                $scope.$destroy();
            }, 0);
        }
    };
});
<div class="gridStyle" bind-once ng-grid="gridOptions"></div>

デモ: http://plnkr.co/edit/4cBOEG?p=preview

類似の投稿:

要素のバインドを完全に停止する - 要素のバインドを解除する - AngularJS

于 2013-10-25T20:38:18.467 に答える
3

この変更により、パフォーマンスの遅れが修正されました。この変更により、ng-grid.js の行番号 1420 の self.resizeOnData() がコメント化されています。

$scope.$on("ngGridEventData", function () {
//self.resizeOnData(temp);

Chrome イベント プロファイラは、このメソッドが何度も呼び出されていることを示しており、データ ソースの変更時にグリッド内のすべてのセルのサイズを変更しているように見えます。私はまだ副作用を見つけるためにテストしていますが、今までのすべての機能は機能しており、パフォーマンスは以前の機能の 5 倍になりました。

この変更が他のものを壊しているのを見たら、私に知らせてください

于 2013-10-29T20:06:13.533 に答える