JSON喜欢语法vs switch语句javascript

Aru*_*run 7 javascript json

我在http://www.jquery4u.com/javascript/shorthand-javascript-techniques/上看到了一篇文章,其中他谈到了使用switch语句的另一种方法.

我在下面创建了一个片段,但我不确定为什么替代品会慢99%.

function doX(){}
function doY(){}
function doN(){}
var something = 1;

var cases = {
    1: doX,
    2: doY,
    3: doN
};
if (cases[something]) {
    cases[something]();
}
Run Code Online (Sandbox Code Playgroud)

http://jsperf.com/alternateswitch

任何的想法?

Ble*_*der 8

"JSON"语法只是一个对象.此外,您的比较在这里有点不公平,因为您在每个定时循环中创建一个全新的对象,这有点贵.

如果将对象创建移动到设置部分,速度差异将变为可忽略不计:http://jsperf.com/alternateswitch/4

如果删除该if语句,该对象将更快(至少对我而言):http://jsperf.com/alternateswitch/5.额外的属性查找和真实性检查确实减慢了速度.


Ja͢*_*͢ck 3

作者从未声称较短的代码(只是可能情况的哈希图)实际上会更快。显然,当您在测试套件中运行数组时,数组创建会对性能产生负面影响。同时,该switch语句是编译后的代码。

cases如果您的代码被重用,您将看到一些改进,即您保留;的值。我在这个测试用例中测量到大约 20-30% 的差异,具体取决于哪种情况更常发生。

也就是说,除非您的代码在紧密循环内运行,否则这样的独立性能测试不会有用,因为测试用例在我的家用计算机上每秒运行 50M+ 操作。因此,两者之间的差异应基于其他因素,例如代码清晰度或switch如果忘记放置语句则语句很容易混乱的事实break;。