js的枚舉類型判斷方式性能比較

簡單的ifelse是大家應(yīng)用比較多的判斷方式闲坎,在情況更多樣的場景下,if else就顯得不夠簡潔了腰懂,但是也有很多人會認(rèn)為if else更能看清作者意圖,這種完全主觀的原因沒有什么討論的意義绣溜,那么我們就來討論一下,在有可枚舉的變量情況下做判斷怖喻,哪一種方式性能更好。
本次的判斷性能對比有三個參賽者:ifelse判斷锚沸,switch判斷,還有一個是同事推薦的使用對象進(jìn)行判斷的方案哗蜈,通過執(zhí)行對象的對應(yīng)方法來進(jìn)行判斷,比較方式也使用js自帶的的時間計算炼列。
我們使枚舉值有5個狀態(tài),對10000個數(shù)進(jìn)行判斷俭尖,只做判斷不做任何其他事,10000對5求余使枚舉值處于0-4之間稽犁,代碼如下

function iffunc(num){
    if (num === 0){

    } else if (num === 2){

    }else if (num === 3){
        
    } else if (num === 4) {

    } else if (num === 1) {

    }
}

function switchfunc(num) {
    switch(num){
        case 0:
        break
        case 1:
        break
        case 2:
        break
        case 3:
        break
        case 4:
        break
    }
}
function objectFunc(num) {
    const obj = {}
    obj[0] = function(){

    }
    obj[1] = function(){
        
    }
    obj[2] = function(){
        
    }
    obj[3] = function(){
        
    }
    obj[4] = function(){
        
    }
    obj[num]()
}
console.time('if')
for (let i = 0; i < 10000;i ++) {
    const num = i % 5
    iffunc(num)
}
console.timeEnd('if')

console.time('switch')
for (let i = 0; i < 10000 ;i ++) {
    const num = i % 5
    switchfunc(num)
}
console.timeEnd('switch')

console.time('obj')
for (let i = 0; i < 10000 ;i ++) {
    const num = i % 5
    objectFunc(num)
}
console.timeEnd('obj')

在相同情況下做10000次枚舉值判斷的時間消耗如下:
if: 2.133ms
switch: 0.685ms
obj: 10.553ms
結(jié)論:可以看到switch的性能最好菱农,ifelse消耗的時間是switch的三倍多一點(diǎn),而對象判斷方式則是ifelse判斷方式的5倍時間循未,對象判斷方式的主要時間消耗在于對象的創(chuàng)建秫舌,在把對象創(chuàng)建和方法添加放在方法外后,性能有了極大的改善
if: 1.893ms
switch: 0.620ms
obj: 0.763ms
可以看到這樣優(yōu)化以后足陨,對象判斷方式的執(zhí)行時間就與swicth非常接近了娇未,但是這個用來進(jìn)行判斷的對象僅僅在調(diào)用判斷方法時才會使用墨缘,沒有必要把它的作用于擴(kuò)大零抬,所以是不是應(yīng)該使用對象來進(jìn)行枚舉值判斷還要看具體的使用場景。
綜上平夜,個人認(rèn)為在涉及枚舉值判斷的情況下,都應(yīng)該用swicth來進(jìn)行判斷忽妒,而不是ifelse,而在對情況不可枚舉的情況下還是用ifelse更好一些段直,因?yàn)楦奖阕x者理解你的意圖,至于對象判斷方式鸯檬,由于和swich性能差距不大,就完全可以根據(jù)你的喜好來進(jìn)行使用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颜及,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讯蒲,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墨林,死亡現(xiàn)場離奇詭異,居然都是意外死亡酌呆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門隙袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菩收,你說我怎么就攤上這事∧榷” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵箱舞,是天一觀的道長。 經(jīng)常有香客問我晴股,道長,這世上最難降的妖魔是什么队魏? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮官帘,結(jié)果婚禮上昧谊,老公的妹妹穿的比我還像新娘刽虹。我一直安慰自己呢诬,他們只是感情好涌哲,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布尚镰。 她就那樣靜靜地躺著,像睡著了一般狗唉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上分俯,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機(jī)與錄音吗铐,去河邊找鬼。 笑死唬渗,一個胖子當(dāng)著我的面吹牛典阵,可吹牛的內(nèi)容都是我干的谣妻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蹋半,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了减江?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤份企,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后司志,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骂远,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年腰根,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片额嘿。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖册养,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捕儒,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布刘莹,位于F島的核電站焚刚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏矿咕。R本人自食惡果不足惜狼钮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一捡絮、第九天 我趴在偏房一處隱蔽的房頂上張望熬芜。 院中可真熱鬧福稳,春花似錦涎拉、人聲如沸的圆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梅掠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阎抒,已是汗流浹背酪我。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工挠蛉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谴古。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像汇陆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子带饱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容