Mana yang lebih cepat foreach atau for loop javascript?

Loop forEach dan for dapat digunakan untuk mencapai fungsi yang sama secara efektif untuk array. Sebagai contoh

for [var i = 0; i < array.length; i++]{ /* .. */ }

dan

array.forEach[function[item, index]{ /* .. */ }];
_

Apakah ada perbedaan di antara mereka?

Perbedaan

Perbedaan paling mendasar antara for loop dan forEach metode adalah

Dengan for

  1. Anda dapat
    array.forEach[function[item, index]{ /* .. */ }];
    _4 keluar dari loop
  2. Anda dapat menggunakan
    array.forEach[function[item, index]{ /* .. */ }];
    _5 untuk melompati iterasi
  3. Performanya jauh lebih cepat daripada forEach
  4. Cakupan indeks, misalnya i, dicakup ke fungsi yang memuatnya.
    // 'i' is scoped to the containing function
    for [var i = 0; i < arr.length; i++] { .. }
    _

Dengan forEach

  1. Anda dapat mensimulasikan
    array.forEach[function[item, index]{ /* .. */ }];
    5 hanya dengan kembali dari fungsi yang diteruskan ke forEach
  2. Namun, tidak ada cara untuk menghentikan ________23______ perulangan sama sekali
  3. Kinerja jauh lebih lambat dari for
  4. Cakupan indeks, misalnya i, dicakup ke fungsi internal.
    // 'i' is scoped to the internal function
    arr.forEach[function [el, i] { .. }];
    _
  5. Namun, forEach lebih ekspresif. Ini mewakili maksud Anda untuk beralih melalui setiap elemen array, dan memberi Anda referensi ke elemen tersebut, bukan hanya indeks

Uji kinerja

Tes kinerja dijalankan di jsperf. com tes untuk loop vs foreach

Berikut perbedaan performa saat menjalankan pengujian di Chrome 47 di Mac OS X

Cakupan perbedaan indeks secara detail

Katakanlah saya ingin melakukan sesuatu yang asinkron dengan elemen-elemen array

// The array:
var elements = ["element1", "element2", "element3"];

Beginilah seharusnya diterapkan menggunakanforEach

elements.forEach[function[element] {
  // The asynchronous action simulator
  setTimeout[function[] {
    console.log[element];
  }, 100];
}];
_

Tanpa mengetahui tentang

// 'i' is scoped to the containing function
for [var i = 0; i < arr.length; i++] { .. }
4 saya akan mulai dengan loop klasik
// 'i' is scoped to the containing function
for [var i = 0; i < arr.length; i++] { .. }
5

for [var i = 0; i < elements.length; i++] {
  setTimeout[function[] {
     console.log[elements[i]];
  }, 100];
}

Ini tidak berfungsi seperti yang diharapkan, karena alih-alih

// 'i' is scoped to the containing function
for [var i = 0; i < arr.length; i++] { .. }
6,
// 'i' is scoped to the containing function
for [var i = 0; i < arr.length; i++] { .. }
7, dan
// 'i' is scoped to the containing function
for [var i = 0; i < arr.length; i++] { .. }
8 di konsol, saya mendapatkan
// 'i' is scoped to the containing function
for [var i = 0; i < arr.length; i++] { .. }
9 tiga kali. Tampaknya ada yang salah dengan variabel
// 'i' is scoped to the internal function
arr.forEach[function [el, i] { .. }];
_0, karena fungsinya bekerja dengan baik dengan
// 'i' is scoped to the internal function
arr.forEach[function [el, i] { .. }];
1. Sebenarnya tidak ada yang salah dengan
// 'i' is scoped to the internal function
arr.forEach[function [el, i] { .. }];
0. Masalahnya adalah nilainya adalah 3 ketika
// 'i' is scoped to the internal function
arr.forEach[function [el, i] { .. }];
3 dipanggil dan karena
// 'i' is scoped to the internal function
arr.forEach[function [el, i] { .. }];
4 tidak ada, ia mencetak
// 'i' is scoped to the containing function
for [var i = 0; i < arr.length; i++] { .. }
9

Saya bukan pengembang penuh waktu, jadi saya mengandalkan pengetahuan dasar saya untuk membawa saya melalui proyek yang memerlukan penulisan kode. Saya sangat senang ketika mengetahui tentang JavaScript. metode forEach[] sebagai pengganti for loop tradisional. Namun, saya dengan baik hati ditegur karena tidak mengikuti perkembangan JavaScript terbaru yang ditawarkan — mengacu pada for…of loop

Menurut mereka yang mengomentari artikel saya sebelumnya, teknik for...of lebih unggul dalam kecepatan dan keterbacaan daripada .forEach[]. Karena saya tidak menulis aplikasi skala besar di mana waktu pemrosesan benar-benar berperan, saya penasaran untuk mencari tahu. Seberapa cepat [atau lambat] setiap jenis struktur iterasi?

Jadi saya memutuskan untuk menguji berbagai hal dan membagikan hasil saya

Lingkaran Primer

Sebelum kita mulai, mari lakukan rekap 30 detik pada berbagai jenis struktur iterasi

  • Sementara Loop. Mekanisme perulangan yang paling sederhana. Perulangan while akan dijalankan selama ekspresi yang diberikan bernilai true
  • Untuk Loop. Struktur iterasi yang berguna ketika jumlah iterasi diketahui. Deklarasi for loop memiliki tiga komponen. inisialisasi variabel, ekspresi untuk menentukan apakah loop akan berakhir, dan pernyataan yang dieksekusi di akhir setiap iterasi
  • forEach[] Metode. Sebuah metode dari kelas array yang mengambil satu argumen, yang merupakan sebuah fungsi, dan menjalankan fungsi tersebut dengan setiap elemen di dalam array
  • Untuk…dari Loop. Yang paling baru ditambahkan dari struktur iterasi, pernyataan ini memerlukan penetapan nama variabel sementara yang akan ditetapkan ke setiap elemen dalam array saat iterasi selesai
let arr = [];// while loop
let i=0;
while[i < arr.length] {
// do stuff
i++;
}
// for loop
for[let i=0; i {
// do stuff
}];
// for...of loop
for[const element of arr] {
// do stuff
}

Skenario Uji

Untuk menguji kecepatan setiap loop, saya membuat array 10, 100, 1.000, dan 1.000.000 bilangan bulat. Dalam setiap loop, tidak ada perhitungan yang dilakukan. Dua metode, console.time[] dan console.timeEnd[], digunakan untuk melaporkan kecepatan masing-masing teknik

Hasil

Hasilnya cukup menarik dan tidak seperti yang saya harapkan. Semua waktu dalam milidetik

Berikut adalah beberapa takeaways utama saya dari latihan ini

  • while loop menskalakan yang terbaik untuk array besar
  • for...of_ loop adalah yang tercepat dalam hal set data kecil, tetapi skalanya buruk untuk set data besar
  • .forEach[] dan for...of cukup dekat sehingga tidak ada pihak yang harus menggantungkan topi mereka pada kinerja sendirian di atas yang lain
  • Waktu eksekusi .forEach[] secara dramatis dipengaruhi oleh apa yang terjadi di dalam setiap iterasi
  • Standar for...of_1 loop biasa-biasa saja di seluruh papan

Saya yakin bahwa memvariasikan kasus uji akan memberikan wawasan yang lebih dalam. Namun, sebagai seseorang yang tidak hidup atau mati dalam sepersekian milidetik, ini sudah cukup memuaskan rasa ingin tahuku

Beri tahu saya pendapat Anda di komentar di bawah. Apakah Anda memiliki kasus penggunaan di mana satu metode jauh mengungguli yang lain?

Mana yang lebih baik forEach atau for loop Javascript?

Kesimpulan. For loop adalah yang tercepat tetapi sulit dibaca . Foreach cepat, dan iterasi dapat dikontrol.

Loop mana yang lebih cepat while atau for atau forEach?

perulangan while adalah yang tercepat.

Mengapa forEach lebih lambat daripada for loop?

ForEach 96% lebih lambat daripada for loop. Terima kasih sebelumnya. Mungkin karena forEach membutuhkan pemanggilan fungsi untuk setiap elemen . Itu tidak cukup menjelaskan mengapa 96% lebih cepat, Anda akan mengharapkan 50% karena Anda membuat 1 panggilan fungsi, bukan 2 untuk setiap elemen.

Apakah untuk loop lambat di Javascript?

Kesimpulan. Perulangan for , while , dan do-while semuanya memiliki karakteristik kinerja yang serupa, sehingga tidak ada satu jenis perulangan yang secara signifikan lebih cepat atau lebih lambat daripada yang lain .

Bài mới nhất

Chủ Đề