2

最近、パフォーマンスを分析するためにBatarangプラグインをいじっています。すべてのログの上部に、regularInterceptedExpression と呼ばれるもの専用のセクションがあることに気付きました。これが何を意味するのか、パフォーマンスを向上させる方法を誰かが説明できますか? ディレクティブで「=」プロパティを使用したことが原因である可能性がある場所を読みました。他の誰かがこれを見た場合、解決策はありますか?

4

1 に答える 1

9

AngularJS コードを掘り下げると、 functionregularInterceptedExpression(scope, locals, assign, inputs)内で定義された関数が表示されますaddInterceptor(parsedExpression, interceptorFn)addInterceptor(parsedExpression, interceptorFn)functionが使用される唯一の場所は function$parse(exp, interceptorFn, expensiveChecks)です。これは、String およびその他のウォッチが関数に変換される場所です。angular.jsファイルを次のように更新する必要があります

$parse(exp, interceptorFn, expensiveChecks)1)解析のソースを保持する機能を強化します。

$$source関数の最初の引数にを設定して、メソッドの終わりと各スイッチケースの終わりの更新を見つけaddInterceptorます。

      parsedExpression.$$source = exp; // keep the source expression handy
      return addInterceptor(parsedExpression, interceptorFn);

    case 'function':
      exp.$$source = exp; // keep the source expression handy
      return addInterceptor(exp, interceptorFn);

    default:
      noop.$$source = exp; // keep the source expression handy
      return addInterceptor(noop, interceptorFn);

2) 関数内で、regularInterceptedExpressionその関数への呼び出しの統計を収集します。

 var fn = regularWatch ? function regularInterceptedExpression(scope, locals, assign, inputs) {
    var value = useInputs && inputs ? inputs[0] : parsedExpression(scope, locals, assign, inputs);
    window.$$rieStats = window.$$rieStats || {};
    window.$$rieStats[parsedExpression.$$source] = (window.$$rieStats[parsedExpression.$$source] ? window.$$rieStats[parsedExpression.$$source] : 0) + 1;
    return interceptorFn(value, scope, locals);

3) アプリケーションを実行して統計を調べます。つまり、開発ツールを開いて$$rieStatsJavaScript コンソールに書き込みます。関数によって呼び出されるウォッチャーの数が表示されregularInterceptedExpressionます。

Object.keys($$rieStats).sort(function(a,b){return $$rieStats[a]-$$rieStats[b]}).reverse().forEach(function(item){ console.log(item, $$rieStats[item])})

ヒント:$$rieStatsカウントを他の分岐関数oneTimeInterceptedExpressionに追加して、1 回限りのバインドも追跡することができます。

于 2016-06-20T06:23:25.140 に答える