小编Kil*_*and的帖子

在微调性能时,多次调用JavaScript方法的最佳方法是什么?

我一直在研究JavaScript性能.我已经了解到,在不止一次访问时,通常最好将闭包变量和类成员复制到本地范围以加快速度.例如:

var i = 100;
var doSomething = function () {
    var localI = i;
    // do something with localI a bunch of times

    var obj = {
        a: 100
    };
    var objA = obj.a;
    // do something with objA a bunch of times
};
Run Code Online (Sandbox Code Playgroud)

我理解这一点; 它为解释器添加了一个快捷方式,用于按名称查找值.在处理方法时,这个概念变得非常不清楚.起初,我认为它会以同样的方式工作.例如:

var obj = {
    fn: function () {
        // Do something
        return this.value;
    },
    value: 100
};
var objFn = obj.fn
objFn();
// call objFn a bunch of times
Run Code Online (Sandbox Code Playgroud)

事实上,这根本不起作用.访问这样的方法会将其从其范围中删除.当它到达this.value行时,这指的是window对象,this.value可能是未定义的.我可以使用objFn.call(obj)将其范围传回到它中,而不是直接调用objFn和丢失范围,但这是否比原始的obj.fn()更好或更差?

我决定写一个脚本来测试这个,我得到了非常令人困惑的结果.该脚本对多个测试进行迭代,这些测试循环执行上述函数调用多次.每次测试所花费的平均时间输出到身体.

使用许多简单方法创建对象.额外的方法用于确定解释器是否必须更加努力地找到特定方法.

测试1简单地调用this.a(); …

javascript methods performance object call

6
推荐指数
1
解决办法
506
查看次数

标签 统计

call ×1

javascript ×1

methods ×1

object ×1

performance ×1