什么是调用javascript函数的最快方法

时间:2011-07-19 22:24:09

标签: javascript performance call

调用全局定义的javascript函数或作为全局变量的属性是否更快?

例如:

选项1

.html:
<input type="checkbox" name="" value="" onClick="dofind()">

.js:
function dofind() { /* code */ }

选项2

.html:
<input type="checkbox" name="" value="" onClick="x.dofind()">

.js:    
var x = {
    dofind: function() { /* code */ }
}

3 个答案:

答案 0 :(得分:3)

在本地范围内调用函数的速度要快得多。你需要在它甚至明显之前进行数百万次调用,而在onclick处理程序中并非如此。

但这些方法都不是理想的。您最好在unobtrusive adding an onclick event listener之前选择after the DOM has loaded路线。

答案 1 :(得分:2)

如果考虑事件侦听器的作用域链,在第一种情况下,它必须解析侦听器作用域链上的对象上的标识符 dofind 。据推测,它不会在任何中间对象上找到,并且可以在全局对象上找到。然后它会被调用。

在第二种情况下,标识符 x 必须在类似(相同的?)范围链上解析,一旦找到,标识符 dofind 必须在该物体的财产。

逻辑说第二种方法因为时间较长而慢。但是,javascript引擎可以根据需要优化范围链和属性访问。很可能(在现代浏览器中)对 dofind 的后续调用将直接进行,而不引用范围链,除非引擎认为链可能已被更改。

在各种浏览器中进行测试将揭示哪些优化此类调用以及哪些不优化。我认为你会发现,在整体应用程序性能方面,调用的差异可以忽略不计,特别是因为解析标识符的速度比用户启动一系列点击事件(可能是1000或更多)要快得多。

答案 2 :(得分:0)

除非您在页面上加载了数千个此类事件处理程序,否则您不会注意到任何性能差异。当您在页面上加载了数千个带有事件处理程序的元素时,附加事件处理程序所花费的时间将是您遇到的最小问题。