Jadual Kandungan
条件语句
查找表
三目运算符
Rumah hujung hadapan web tutorial js JavaScript条件语句的性能问题

JavaScript条件语句的性能问题

Feb 28, 2017 pm 02:48 PM
javascript Isu prestasi pernyataan bersyarat

条件语句

和循环一样,条件语句同样会改变运行流
JavaScript的条件语句分为两种

  • if-else

  • switch

if-else是我们最常用的了
不过if-else语句与switch语句很多情况都能够互相替换
比如说下面的代码等价

if(foo){    ...}else{    ...}
Salin selepas log masuk
switch(foo){
    case true:        ...
    default:        ...}
Salin selepas log masuk

条件少的时候大家更倾向于使用if-else
但是条件多的化switch看起来更容易理解

if(foo === 1){    
...}else if(foo === 2){    
...}else if(foo === 3){    
...}else if(foo === 4){    
...}else{    
...}
Salin selepas log masuk
switch(foo){
    case 1:        ...
    case 2:        ...
    case 3:        ...
    case 4:        ...
    default:        ...}
Salin selepas log masuk

但是我们使用的这两种条件语句哪种性能更好呢
如果条件数量非常大的话,switch语句运行的更快更明显
准确的说:条件增加时,if-else性能负担增加程度更大
(大多数语言switch语句采用 branch table 分支表索引来优化)
而且在JavaScript中,switch语句是不会发生强制类型转换的,
也就是使用全等操作符进行比较
这样就不会有类型转换的损耗

所以我们在条件数量少时使用if-else,条件数量多时使用switch
从性能角度考虑是合理的
(if-else适用于判断两个离散值或几个不同值域,switch适用于判断多个离散值)


我们在使用if-else语句时,应该按照概率由大变小的顺序排列
这很好理解,但却很容易被我们忽略
另外一点优化就是尽量把if-else组织成一系列嵌套的if-else语句
这就类似于我们数学上的二分法,可以减少范围、减少执行时间
像这样

if(foo >= 1 && foo < 3){
    //...}else if(foo >= 3 && foo < 5){
    //...}else if(foo >= 5 && foo < 7){
    //...}else{
    //...}
Salin selepas log masuk

改成这样

if(foo >= 1 && foo < 5){    if(foo < 3){
        //...
    }else{
        //...
    }
}else{    if(foo < 7){
        //...
    }else{
        //...
    }
}
Salin selepas log masuk

可以提高效率

查找表

某些特殊情况,使用“查找表”的方法有着超高的性能,在条件数量很多的情况下

function fn(a){
    switch(a){        
    case 0:            
    return 0;        
    case 1:            
    return 1;        
    case 2:            
    return 2;        
    case 3:            
    return 3;        
    case 4:            
    return 4;        
    case 5:            
    return 5;        
    case 6:            
    return 6;        
    case 7:            
    return 7;
    }
}
Salin selepas log masuk

把上面的函数重构成这样

function fn(a){
    var retArr = [0,1,2,3,4,5,6,7];    return retArr[a];
}
Salin selepas log masuk

这样不仅简洁,可读性好,而且性能也更佳
在条件数量越来越多时,查找表也几乎不会产生额外的性能开销
不过它更适用于单个键与单个值之间存在逻辑映射的情况

三目运算符

还有一个和条件语句很像的三目运算符
? :
就相当于if-else
三目运算符更适用于关注返回值的情景
什么意思呢,看下面的代码

var foo;;if(flag){
    foo = 1;
}else{
    foo = 2;
}
Salin selepas log masuk

改写成这样更好

var foo = flag ? 1 : 2;
Salin selepas log masuk

关注的是flag ? 1 : 2的返回值
直接赋值给foo变量
这种场合非常适合使用三目运算符


以上就是JavaScript中条件语句的性能问题
虽然我们很少用到条件数量很大的情况
而且现代浏览器js引擎还特别强大(比如V8引擎[]~( ̄▽ ̄)~*)
不过了解一下没坏处…

 以上就是JavaScript条件语句的性能问题的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 pm 02:54 PM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian Pengenalan: Dengan perkembangan teknologi yang berterusan, teknologi pengecaman pertuturan telah menjadi bahagian penting dalam bidang kecerdasan buatan. Sistem pengecaman pertuturan dalam talian berdasarkan WebSocket dan JavaScript mempunyai ciri kependaman rendah, masa nyata dan platform merentas, dan telah menjadi penyelesaian yang digunakan secara meluas. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem pengecaman pertuturan dalam talian.

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata Dec 17, 2023 pm 05:30 PM

WebSocket dan JavaScript: Teknologi utama untuk merealisasikan sistem pemantauan masa nyata Pengenalan: Dengan perkembangan pesat teknologi Internet, sistem pemantauan masa nyata telah digunakan secara meluas dalam pelbagai bidang. Salah satu teknologi utama untuk mencapai pemantauan masa nyata ialah gabungan WebSocket dan JavaScript. Artikel ini akan memperkenalkan aplikasi WebSocket dan JavaScript dalam sistem pemantauan masa nyata, memberikan contoh kod dan menerangkan prinsip pelaksanaannya secara terperinci. 1. Teknologi WebSocket

Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 am 09:39 AM

Cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian Dalam era digital hari ini, semakin banyak perniagaan dan perkhidmatan perlu menyediakan fungsi tempahan dalam talian. Adalah penting untuk melaksanakan sistem tempahan dalam talian yang cekap dan masa nyata. Artikel ini akan memperkenalkan cara menggunakan WebSocket dan JavaScript untuk melaksanakan sistem tempahan dalam talian dan memberikan contoh kod khusus. 1. Apakah itu WebSocket? WebSocket ialah kaedah dupleks penuh pada sambungan TCP tunggal.

Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Dec 17, 2023 pm 12:09 PM

Pengenalan kepada cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata: Dengan populariti Internet dan kemajuan teknologi, semakin banyak restoran telah mula menyediakan perkhidmatan pesanan dalam talian. Untuk melaksanakan sistem pesanan dalam talian masa nyata, kami boleh menggunakan teknologi JavaScript dan WebSocket. WebSocket ialah protokol komunikasi dupleks penuh berdasarkan protokol TCP, yang boleh merealisasikan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Dalam sistem pesanan dalam talian masa nyata, apabila pengguna memilih hidangan dan membuat pesanan

Nota Pembangunan Vue: Elakkan Penggunaan Memori Biasa dan Isu Prestasi Nota Pembangunan Vue: Elakkan Penggunaan Memori Biasa dan Isu Prestasi Nov 22, 2023 pm 02:38 PM

Memandangkan Vue semakin digunakan secara meluas, pembangun Vue juga perlu mempertimbangkan cara mengoptimumkan prestasi dan penggunaan memori aplikasi Vue. Artikel ini akan membincangkan beberapa pertimbangan untuk pembangunan Vue untuk membantu pembangun mengelakkan masalah penggunaan memori dan prestasi biasa. Elakkan gelung tak terhingga Apabila komponen terus mengemas kini keadaannya sendiri, atau komponen secara berterusan menghasilkan komponen anak sendiri, gelung tak terhingga mungkin terhasil. Dalam kes ini, Vue akan kehabisan memori dan menjadikan aplikasi sangat perlahan. Untuk mengelakkan situasi ini, Vue menyediakan a

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Dec 17, 2023 pm 05:13 PM

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Pengenalan: Hari ini, ketepatan ramalan cuaca sangat penting kepada kehidupan harian dan membuat keputusan. Apabila teknologi berkembang, kami boleh menyediakan ramalan cuaca yang lebih tepat dan boleh dipercayai dengan mendapatkan data cuaca dalam masa nyata. Dalam artikel ini, kita akan mempelajari cara menggunakan teknologi JavaScript dan WebSocket untuk membina sistem ramalan cuaca masa nyata yang cekap. Artikel ini akan menunjukkan proses pelaksanaan melalui contoh kod tertentu. Kami

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript: Bagaimana untuk mendapatkan kod status HTTP, contoh kod khusus diperlukan: Dalam pembangunan web, interaksi data dengan pelayan sering terlibat. Apabila berkomunikasi dengan pelayan, kami selalunya perlu mendapatkan kod status HTTP yang dikembalikan untuk menentukan sama ada operasi itu berjaya dan melaksanakan pemprosesan yang sepadan berdasarkan kod status yang berbeza. Artikel ini akan mengajar anda cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan menyediakan beberapa contoh kod praktikal. Menggunakan XMLHttpRequest

Bagaimana untuk menggunakan insertBefore dalam javascript Bagaimana untuk menggunakan insertBefore dalam javascript Nov 24, 2023 am 11:56 AM

Penggunaan: Dalam JavaScript, kaedah insertBefore() digunakan untuk memasukkan nod baharu dalam pepohon DOM. Kaedah ini memerlukan dua parameter: nod baharu untuk dimasukkan dan nod rujukan (iaitu nod di mana nod baharu akan dimasukkan).

See all articles