2015-07-31 3 views
2

Например: у меня есть много функций и их много раз использовать. Мне нужно подсчитывать вызовы для каждой функции. Какова наилучшая практика?Счет вызовов функций с использованием JavaScript

Сначала мне показалось, что мне нужны замыкания, но я не могу реализовать его правильно.

+0

На какой цели вам нужен результат? назад/пользователь? – ted

+0

Являются ли результаты непрерывным счетом, сессией и т. Д.? –

+0

Мне нужны только вары с количеством звонков, неважно –

ответ

3

В простейшем случае, вы можете украсить каждую функцию с профилирующей обертке:

_calls = {} 
 

 
profile = function(fn) { 
 
    return function() { 
 
     _calls[fn.name] = (_calls[fn.name] || 0) + 1; 
 
     return fn.apply(this, arguments); 
 
    } 
 
} 
 

 
function foo() { 
 
    bar() 
 
    bar() 
 
} 
 

 
function bar() { 
 
} 
 

 
foo = profile(foo) 
 
bar = profile(bar) 
 

 
foo() 
 
foo() 
 

 
document.write("<pre>" + JSON.stringify(_calls,0,3));

Для серьезной отладки вам может быть выгоднее использовать специальный профилировщик (обычно расположенный в консоли вашего браузера).

+0

i get '" undefined ": 6' на ie11 –

+0

@NinaScholz: похоже, что он не поддерживает' function.name' ... – georg

+0

Затем перейдите для: profile = function (fn, fnname) и укажите имя функция вручную при вызове –

0

Вы могли бы попробовать что-то вроде этого:

<script> 
    var aCalls = 0; 
    var bCalls = 0; 
    function a() 
    { 
     aCalls = aCalls + 1; 
     alert(aCalls); 
    } 
    function b() 
    { 
     bCalls = bCalls + 1; 
     alert(bCalls); 
    } 
</script> 
+0

Этот ответ не заполняет требование вопроса. Почему существуют две переменные, и вы сохраняете их только в переменных, вы их не показываете. –

+0

Он попросил систему подсчета для каждой функции. – Jojo01

+0

О да. Он попросил только счет. Извините, должно быть, это неправильно. –

0

Лучший способ - использовать профилировщик.

В IE: нажмите F12, чтобы открыть инструменты разработчика, затем перейдите на вкладку «Профайлер» и нажмите кнопку воспроизведения. После остановки профайлера вам будет предоставлено много информации (количество вызовов для каждой функции, включающее время, эксклюзивное время и т. Д.)

В Chrome: нажмите F12, перейдите к профилю, сгенерируйте профиль процессора JavaScript (это не укажет вам количество звонков, хотя)

Смежные вопросы