if-else、switch 或 map based 条件的性能

Performance of if-else, switch or map based conditioning(if-else、switch 或 map based 条件的性能)
本文介绍了if-else、switch 或 map based 条件的性能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道以下 javascript 中条件结构的实现的性能.

I was wondering about the performances of the following implementations of conditional structs in javascript.

方法一:

 if(id==="camelCase"){
    window.location.href = "http://www.thecamelcase.com";
}else if (id==="jsFiddle"){
    window.location.href = "http://jsfiddle.net/";
}else if (id==="cricInfo"){
    window.location.href = "http://cricinfo.com/";
}else if (id==="apple"){
    window.location.href = "http://apple.com/";
}else if (id==="yahoo"){
    window.location.href = "http://yahoo.com/";
}           

方法二:

switch (id) {
case 'camelCase':
    window.location.href = "http://www.thecamelcase.com";
    break;
case 'jsFiddle':
    window.location.href = "http://www.jsfiddle.net";
    break;
case 'cricInfo':
    window.location.href = "http://www.cricinfo.com";
    break;
case 'apple':
    window.location.href = "http://www.apple.com";
    break;
case 'yahoo':
    window.location.href = "http://www.yahoo.com";
    break;

}

方法3

var hrefMap = {
camelCase : "http://www.thecamelcase.com",
jsFiddle: "http://www.jsfiddle.net",
cricInfo: "http://www.cricinfo.com",
apple: "http://www.apple.com",
yahoo: "http://www.yahoo.com"
};
window.location.href = hrefMap[id];

方法四

window.location.href = {
    camelCase : "http://www.thecamelcase.com",
    jsFiddle: "http://www.jsfiddle.net",
    cricInfo: "http://www.cricinfo.com",
    apple: "http://www.apple.com",
    yahoo: "http://www.yahoo.com"
}[id];

可能方法 3 和 4 可能具有几乎相同的性能,但只是发布以确认.

Probably Method 3 and 4 might have almost the same performance but just posting to confirm.

推荐答案

据此JSBen.ch测试,switch 设置是提供的方法中最快的(Firefox 8.0 和 Chromium 15).

According to this JSBen.ch test, the switch setup is the fastest out of the provided methods (Firefox 8.0 and Chromium 15).

方法 3 和 4 的速度稍慢,但几乎不明显.显然,if-elseif 方法的速度要慢得多(FireFox 8.0).

Methods 3 and 4 are slightly less fast, but it's hardly noticeable. Clearly, the if-elseif method is significantly slower (FireFox 8.0).

Chromium 15 中的相同测试未显示这些方法之间的性能存在显着差异.事实上,if-elseif 方法似乎是 Chrome 中最快的方法.

The same test in Chromium 15 does not show significant differences in performance between these methods. In fact, the if-elseif method seems to be the fastest method in Chrome.

我已经再次运行了测试用例,另外还有 10 个条目.hrefmap(方法 3 和 4)表现出更好的性能.

I have run the test cases again, with 10 additional entries. The hrefmap (methods 3 and 4) show a better performance.

如果你想在函数中实现 compare 方法,方法 3 肯定会胜出:将映射存储在一个变量中,然后在稍后引用这个变量,而不是重新构建它.

If you want to implement the compare method in a function, method 3 would definitely win: Store the map in a variable, and refer to this variable at a later point, instead of reconstructing it.

这篇关于if-else、switch 或 map based 条件的性能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)