Nic*_*ilt 5 javascript performance
我认为正则表达式非常快,第三种选择令人困惑.你怎么看?
http://jqfundamentals.com/book/ch09s12.html
// old way
if (type == 'foo' || type == 'bar') { ... }
// better
if (/^(foo|bar)$/.test(type)) { ... }
// object literal lookup
if (({ foo : 1, bar : 1 })[type]) { ... }
Run Code Online (Sandbox Code Playgroud)
我会谦卑地不同意Rebecca Murphey并投票支持简单,这是第一种选择.
我认为正则表达式非常快
机器代码甚至更快,但我们不使用它.
第三个选择令人
困惑如果你不熟悉这个技巧,那只会让人感到困惑.(对于那些不习惯看正则表达式比较两个字符串的人来说,第二个选项会更加混乱.)
我只是做了一个基本的基准,我老实说不确定她是如何得到这些结果的...... http://jsbin.com/uzuxi4/2/edit
正则表达式似乎是最好的,但第一个是所有现代浏览器中最快的.最后一个是极其缓慢的.我理解三者之间的复杂性理论,但在实践中,似乎并不正确.
更不用说第一个也具有最佳可读性的事实,它似乎也是最快的.我甚至嵌套循环来利用文字表或常量的任何浏览器缓存(无济于事).
编辑: 看来,当一个对象被明确创建时,她确实是正确的,但是:http://jsbin.com/uzuxi4/4/edit
function __hash() {
...
var type = 'bar';
var testobj = { foo : 1, bar : 1 };
var c = 0;
for (i = 0; i < 1000; i++) {
if (testobj[type]) {
for (j = 0; j < 10000; j++) {
if (testobj[type]) { c++; }
}
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
我们看到,一旦对象具有内部参考,寻道时间就会下降到大约500毫秒,这可能是平台.对象键查找对于较大的数据集可能是最佳的,但实际上我并不认为它是日常使用的可行选项.
随着添加更多替代字符串,第三个选项的扩展性也比其他两个更好,因为在平均情况下,前两个选项的复杂度为 O(n),第三个选项的复杂度为 O(1)。
如果我们想讨论哪个选项更漂亮/更易于维护,那是一个完全独立的对话。