在JS中创建快捷方式会降低性能

时间:2015-01-21 21:25:26

标签: javascript performance

快捷方式我的意思是:var do = some.thing.do

例如,我的代码包含快捷键:

MyModule3 = {
  doSmth3 : function() {
    var doSmth1 = MyModule1.doings.doSmth1,
        doSmth2 = MyModule2.doings.doSmth2;

    doSmth1();
    doSmth2();
  }
}

这个没有捷径:

MyModule3 = {
  doSmth3 : function() {
    MyModule1.doings.doSmth1();
    MyModule2.doings.doSmth2();
  }
}

第一个代码会慢于第二个代码吗? 我想答案是“是的,第一个是慢的,但没有理由担心它,因为性能上的差异不会很大”。

但是,如果我有数百个带快捷键的功能怎么办?这种差异在某个时刻会变得至关重要吗?

=======

我试过测试它,但结果很奇怪。

当我跑步时:

testWithShortcuts();
testWithoutShortcuts();

然后第一次测试比第二次测试运行得更快。 但如果我按相反的顺序运行它:

testWithoutShortcuts();  
testWithShortcuts();

然后第一次测试再次运行得更快。

我不熟悉性能测试。也许我的测试实际上没有做它应该做的事情。

3 个答案:

答案 0 :(得分:3)

TL; DR

真实答案

然而,可能的差异是如此之小,以至于在99%的时间内,这种关注是非感性的。

讨论

为了推动归位,最好优化可维护性,可理解性和清晰度,然后担心内存中的一些额外指针。事实上,一旦编译成机器码,它们就是相同的指针,它只会影响JIT步骤,这些日子是以毫秒为单位进行测量的。

最好编写可读性代码,并且只有当应用程序开始减慢运行时,一些分析才能找到缓慢的部分并优化该部分。机会是缓慢的问题是完全不同于你做的额外的别名

答案 1 :(得分:1)

是的,您创建快捷方式的代码会稍慢,但差别不大。

为了使差异显着,将值赋值给变量必须是你正在做的事情的一个相当大的部分。只是调用一个函数比为一个变量赋值(即使函数没有做太多)也要昂贵得多,所以创建快捷方式永远不会很重要。

答案 2 :(得分:0)

不,从不变得至关重要。我很想接受Paul Irish的话,并说你甚至不能允许关心这样的表现;)