2016-05-23 8 views
2

Я недавно возился с плагином Batarang, чтобы проанализировать некоторые характеристики. Я заметил, что в верхней части каждого журнала есть раздел, посвященный тому, что называется regularInterceptedExpression. Может кто-нибудь объяснить, что это значит и каковы некоторые способы улучшить производительность. Я читал где-то, что может быть от использования свойства '=' в директивах. Если кто-нибудь еще видел это, есть ли решение?Batarang regularInterceptedExpression

ответ

8

Если вы копаете код AngularJS, вы можете увидеть функцию regularInterceptedExpression(scope, locals, assign, inputs), определенную внутри функции addInterceptor(parsedExpression, interceptorFn). Единственное место, где используется функция addInterceptor(parsedExpression, interceptorFn), - это функция $parse(exp, interceptorFn, expensiveChecks). Здесь String и другие часы преобразуются в функции. Вам необходимо обновить angular.js файл

1) усилить функцию $parse(exp, interceptorFn, expensiveChecks) сохранить источник разбора:

Найти конец метода, и каждый случай конечного выключателя обновление с установкой $$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) запустить вас приложение и проверить статистику, то есть открыть средства разработки и записи $$rieStats в JavaScript консоль. Вы должны увидеть количество наблюдателей, вызываемых функцией regularInterceptedExpression.

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

Подсказка: вы можете также добавить $$rieStats подсчетом к другой функции ветви oneTimeInterceptedExpression отслеживать в одно время связывания, а также.