Подсчет вызовов функций с помощью JavaScript
Например: у меня много функций, и я использую их много раз. Мне нужно считать звонки для каждой функции. Какова лучшая практика, чтобы сделать это?
Сначала я думал, что мне нужны замыкания, но я не могу правильно их реализовать.
5 ответов
В простейшем случае вы можете украсить каждую функцию профилирующей оболочкой:
_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));
Для серьезной отладки вам лучше использовать специальный профилировщик (обычно расположенный в консоли вашего браузера).
Вы можете попробовать что-то вроде этого:
<script>
var aCalls = 0;
var bCalls = 0;
function a()
{
aCalls = aCalls + 1;
alert(aCalls);
}
function b()
{
bCalls = bCalls + 1;
alert(bCalls);
}
</script>
var count = 0;
function myfunction()
{
count++;
alert( "Function called " + count);
}
myfunction();
myfunction();
Лучший способ - использовать профилировщик.
В IE: нажмите F12, чтобы открыть инструменты разработчика, затем перейдите на вкладку Profiler и нажмите кнопку воспроизведения. После остановки профилировщика вы получите много информации (количество вызовов для каждой функции, включенное время, исключительное время и т. Д.)
В Chrome: нажмите F12, перейдите в "Профили", "Собрать профиль ЦП JavaScript", хотя количество вызовов не будет указываться.
Мой подход заключается в добавлении свойства count к самой функции.
Просто добавьте одну строку в начале функции, которую вы хотите отслеживать.
function func() {
func.count = (func.count || 0) + 1;
// first time you call the function func.count is undefined so use 0 instead
console.log("hi");
}
func();
console.log(func.count) // 1
func();
func();
func();
console.log(func.count) // 4
В конце концов, функции — это объекты в javascript. Нет загрязнения глобального пространства имен, не требуется обёртывания или закрытия, очень просто понять и написать.