Jadual Kandungan
Kitaran manakah yang lebih pantas?
Jenis gelung, Dan di manakah kita harus menggunakannya
Rumah hujung hadapan web tutorial js Jenis gelung yang manakah paling pantas dalam JavaScript? Perbandingan beberapa untuk gelung

Jenis gelung yang manakah paling pantas dalam JavaScript? Perbandingan beberapa untuk gelung

Jul 21, 2021 am 11:04 AM
untuk gelung javascript

Jenis gelung yang manakah paling pantas dalam JavaScript? Perbandingan beberapa untuk gelung

JavaScript ialah "pokok malar hijau" dalam bidang pembangunan web. Sama ada rangka kerja JavaScript (seperti Node.js, React, Angular, Vue, dll.) atau JavaScript asli, semuanya mempunyai pangkalan peminat yang sangat besar. Mari bercakap tentang JavaScript moden. Gelung sentiasa menjadi bahagian penting dalam kebanyakan bahasa pengaturcaraan, dan JavaScript moden memberi kita banyak cara untuk mengulang atau menggelung nilai.

Tetapi persoalannya, adakah kita benar-benar tahu gelung atau lelaran mana yang terbaik untuk keperluan kita. Terdapat banyak variasi gelung for, seperti for, for (tertib terbalik), for…of, forEach, for…in, for…await. Artikel ini akan membincangkan perkara ini.

Fahami untuk gelung atau iterator yang sesuai untuk keperluan kita untuk menghalang kita daripada membuat beberapa kesilapan peringkat rendah yang menjejaskan prestasi aplikasi.

Kitaran manakah yang lebih pantas?

Jawapannya sebenarnya: for (dalam susunan terbalik)

Perkara yang paling mengejutkan saya ialah selepas saya mengujinya pada tempatan saya komputer, saya perlu menerima hakikat bahawa for (dalam susunan terbalik) adalah gelung for terpantas. Di bawah saya akan memberikan contoh melaksanakan gelung melalui tatasusunan yang mengandungi lebih daripada sejuta elemen.

Penafian: console.time() Ketepatan keputusan sangat bergantung pada konfigurasi sistem tempat kami menjalankan ujian. Anda boleh mengetahui lebih lanjut tentang ketepatan di sini.

const million = 1000000; 
const arr = Array(million);

// 注:这是稀疏数组,应该为其指定内容,否则不同方式的循环对其的处理方式会不同:
// const arr = [...Array(million)]

console.time('⏳');
for (let i = arr.length; i > 0; i--) {} // for(倒序)  :- 1.5ms
for (let i = 0; i < arr.length; i++) {} // for          :- 1.6ms
arr.forEach(v => v)                     // foreach      :- 2.1ms
for (const v of arr) {}                 // for...of     :- 11.7ms
console.timeEnd(&#39;⏳&#39;);
Salin selepas log masuk

Sebab untuk hasil ini mudah dalam kod, gelung ke hadapan dan belakang for mengambil masa yang hampir sama, dengan hanya perbezaan 0.1 milisaat. Sebabnya ialah for (dalam susunan terbalik) hanya perlu mengira pembolehubah permulaan let i = arr.length sekali, manakala dalam gelung for dalam susunan hadapan ia menyemak keadaan i<arr.length selepas setiap kenaikan pembolehubah. Perbezaan halus ini tidak begitu penting dan anda boleh mengabaikannya. (Nota penterjemah: Kita boleh mengabaikannya apabila volum data kecil atau kod tidak sensitif masa. Walau bagaimanapun, menurut ujian penterjemah, apabila volum data mengembang, seperti berbilion, ratusan bilion, dll., jurang itu meningkat dengan ketara. , kita perlu mempertimbangkan kesan masa pada prestasi aplikasi)

dan forEach ialah kaedah prototaip Array, berbanding dengan gelung for biasa, forEach dan for…of Ia mengambil lebih banyak masa untuk melelaran melalui tatasusunan. (Nota Penterjemah: Tetapi perlu diperhatikan bahawa kedua-dua for…of dan forEach memperoleh data daripada objek, tetapi prototaip tidak, jadi tiada perbandingan.)

Jenis gelung, Dan di manakah kita harus menggunakannya

1 Untuk gelung (urutan hadapan dan belakang)

Saya rasa, mungkin semua orang Anda patut. semua sangat mengenali kitaran asas ini. Kita boleh menggunakan gelung for di mana-mana sahaja kita perlu menjalankan sekeping kod beberapa kali yang diluluskan. Gelung for paling asas berjalan paling pantas, jadi kita harus menggunakannya setiap masa, bukan? Tidak, prestasi bukan sahaja satu-satunya kriteria kebolehbacaan kod selalunya lebih penting.

2 forEach

Kaedah ini perlu menerima fungsi panggil balik sebagai parameter input dan berulang melalui setiap elemen tatasusunan elemen dan laksanakan fungsi panggil balik kami (melalui elemen itu sendiri dan indeksnya (pilihan) sebagai argumen). forEach juga membenarkan parameter pilihan this digunakan dalam fungsi panggil balik.

const things = [&#39;have&#39;, &#39;fun&#39;, &#39;coding&#39;];
const callbackFun = (item, idex) => {
    console.log(`${item} - ${index}`);
}
things.foreach(callbackFun); 
/* 输出   have - 0
        fun - 1
        coding - 2 */
Salin selepas log masuk

Perlu diingatkan bahawa jika kami ingin menggunakan forEach, kami tidak boleh menggunakan operator litar pintas JavaScript (||, &&...), iaitu, kami tidak boleh melangkau atau berakhir dengan setiap kitaran gelung.

3 for…of

for…of diseragamkan dalam ES6 (ECMAScript 6). Ia mencipta gelung untuk objek boleh lelar (seperti array, map, set, string, dll.) dan mempunyai kelebihan yang luar biasa, iaitu kebolehbacaan yang sangat baik.

const arr = [3, 5, 7];
const str = &#39;hello&#39;;
for (let i of arr) {
   console.log(i); // 输出 3, 5, 7
}
for (let i of str) {
   console.log(i); // 输出 &#39;h&#39;, &#39;e&#39;, &#39;l&#39;, &#39;l&#39;, &#39;o&#39;
}
Salin selepas log masuk

Perlu diingatkan bahawa sila jangan gunakan for……of dalam penjana, walaupun gelung for……of ditamatkan lebih awal. Selepas keluar dari gelung, penjana ditutup dan percubaan dibuat untuk lelaran semula tanpa menghasilkan sebarang keputusan lanjut.

4.

for…in 会在对象的所有可枚举属性上迭代指定的变量。对于每个不同的属性,for…in 语句除返回数字索引外,还将返回用户定义的属性的名称。 因此,在遍历数组时最好使用带有数字索引的传统 for 循环。 因为 for…in 语句还会迭代除数组元素之外的用户定义属性,就算我们修改了数组对象(例如添加自定义属性或方法),依然如此。

const details = {firstName: &#39;john&#39;, lastName: &#39;Doe&#39;};
let fullName = &#39;&#39;;
for (let i in details) {
    fullName += details[i] + &#39; &#39;; // fullName: john doe
}
Salin selepas log masuk

<span style="font-size: 16px;">for…of</span><span style="font-size: 16px;">for…in</span>

for…offor…in 之间的主要区别是它们迭代的内容。for…in 循环遍历对象的属性,而 for…of 循环遍历可迭代对象的值。

let arr= [4, 5, 6];
for (let i in arr) {
   console.log(i); // &#39;0&#39;, &#39;1&#39;, &#39;2&#39;
}
for (let i of arr) {
   console.log(i); // &#39;4&#39;, &#39;5&#39;, &#39;6&#39;
}
Salin selepas log masuk

Jenis gelung yang manakah paling pantas dalam JavaScript? Perbandingan beberapa untuk gelung

结论

  • for 最快,但可读性比较差
  • foreach 比较快,能够控制内容
  • for...of 比较慢,但香
  • for...in 比较慢,没那么方便

最后,给你一条明智的建议 —— 优先考虑可读性。尤其是当我们开发复杂的结构程序时,更需要这样做。当然,我们也应该专注于性能。尽量避免增添不必要的、多余的花哨代码,因为这有时可能对你的程序性能造成严重影响。祝你编码愉快。

译者注

在译者的实际测试中,发现:

  • 不同浏览器甚至不同版本,结果会有不一样(颠倒,例如 Firefox 对原生 for-loop 似乎不太友好,Safari 极度喜欢 while)
  • 不同平台操作系统处理器,结果会有不一样

英文原文地址:https://medium.com/javascript-in-plain-english/which-type-of-loop-is-fastest-in-javascript-ec834a0f21b9

原文作者:kushsavani

本文转载自:https://juejin.cn/post/6930973929452339213

译者:霜羽 Hoarfroster

更多编程相关知识,请访问:编程入门!!

Atas ialah kandungan terperinci Jenis gelung yang manakah paling pantas dalam JavaScript? Perbandingan beberapa untuk gelung. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan 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

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

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.

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).

Bagaimana untuk mendapatkan kod status HTTP dalam JavaScript dengan cara yang mudah Bagaimana untuk mendapatkan kod status HTTP dalam JavaScript dengan cara yang mudah Jan 05, 2024 pm 01:37 PM

Pengenalan kepada kaedah mendapatkan kod status HTTP dalam JavaScript: Dalam pembangunan bahagian hadapan, kita selalunya perlu berurusan dengan interaksi dengan antara muka bahagian belakang, dan kod status HTTP adalah bahagian yang sangat penting daripadanya. Memahami dan mendapatkan kod status HTTP membantu kami mengendalikan data yang dikembalikan oleh antara muka dengan lebih baik. Artikel ini akan memperkenalkan cara menggunakan JavaScript untuk mendapatkan kod status HTTP dan memberikan contoh kod khusus. 1. Apakah kod status HTTP bermakna kod status HTTP apabila penyemak imbas memulakan permintaan kepada pelayan, perkhidmatan tersebut

See all articles