使用 JavaScript 计算函数调用
Count functions calls with JavaScript
比如:我有很多功能,用了很多次。
我需要计算每个函数的调用次数。
实现它的最佳做法是什么?
起初我以为我需要闭包,但我无法以正确的方式实现它。
您可以尝试这样的操作:
<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();
在最简单的情况下,您可以用分析包装器装饰每个函数:
_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));
对于严肃的调试,您最好使用专用的分析器(通常位于浏览器的控制台中)。
最好的方法是使用分析器。
在 IE 上:按 F12 打开开发者工具,然后转到 Profiler 选项卡,然后点击播放按钮。停止 profiler 后,你会看到很多信息(每个函数的调用次数、包含时间、独占时间等)
在 Chrome 上:按 F12,转到配置文件,收集 JavaScript CPU 配置文件(虽然不会告诉您通话次数)
比如:我有很多功能,用了很多次。 我需要计算每个函数的调用次数。 实现它的最佳做法是什么?
起初我以为我需要闭包,但我无法以正确的方式实现它。
您可以尝试这样的操作:
<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();
在最简单的情况下,您可以用分析包装器装饰每个函数:
_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));
对于严肃的调试,您最好使用专用的分析器(通常位于浏览器的控制台中)。
最好的方法是使用分析器。
在 IE 上:按 F12 打开开发者工具,然后转到 Profiler 选项卡,然后点击播放按钮。停止 profiler 后,你会看到很多信息(每个函数的调用次数、包含时间、独占时间等)
在 Chrome 上:按 F12,转到配置文件,收集 JavaScript CPU 配置文件(虽然不会告诉您通话次数)