什么是JavaScript“呼叫”以及它与效率的关系?

时间:2011-03-09 18:38:00

标签: javascript jquery optimization query-optimization

我正在对我制作的JavaScript函数进行一些测试和优化。我注意到我在Firefox(FireUnit)中使用的附加组件返回了在分析时间内完成的调用次数。这是脚本发出的http调用次数吗?

另外,您是否可以概述/讨论/评分/解释在合理范围内考虑的电话数量?也许通过提供示例或常用的JavaScript函数,如下拉菜单,隐藏/显示图像,图像幻灯片功能等...

呼叫是代表“工作”的任何衡量标准还是仅代表执行的迭代?

2 个答案:

答案 0 :(得分:6)

在此上下文中,调用是调用函数的次数。

function foo() {

};

foo();
foo();

在上面的例子中,函数foo已被调用/调用两次

“什么是好的通话范围”没有答案。像jQuery这样的函数很可能每页被调用很多次,而你期望像init()这样的函数只被调用一次。

更好地表示函数的效率是它们的执行时间;这记录了函数执行所花费的时间(几乎总是以毫秒记录)。可以优化具有较长执行时间的函数,以缩短执行时间并提高程序的效率。

为了最好地花时间,您可以将两个统计信息(调用计数和执行时间)结合起来,并查看优化大量调用的函数,并且执行时间更长。

答案 1 :(得分:3)

调用次数表示给定函数运行,调用或执行的次数。通话次数没有很好的范围。这个数字为您提供了两个最重要的信息:

首先,如果某个函数只被调用一次而另一些函数被调用100次,那么后者中的每个优化都比前者重要100倍。优化仅调用一次的函数通常是浪费时间,但如果函数被调用很多次,那么查看它是否不是太慢可能很重要。

从函数调用的数量可以看到的第二件事是,如果某个函数被调用了数百次,实际上它总是具有相同的结果,那么它可能意味着你在调用它时在循环内调用它并将值存储在变量中就足够了。

例如,这将调用昂贵的函数1000次:

for (i = 0; i < 1000; i++) {
    array[i] = i + expensiveFunction();
}

虽然这只会叫它一次:

value = expensiveFunction();
for (i = 0; i < 1000; i++) {
    array[i] = i + value;
}

看到你的一些函数被调用很多次可能暗示你有一些类似于那个例子的代码。当然,您不能每次都缓存该值,但有时您会这样做,并且知道函数调用的数量可能很有用。