Apa standar saat ini pada tahun 2017 di Javascript dengan for () loop vs .forEach.
Saat ini saya sedang mempelajari Colt Steeles "Web Dev Bootcamp" di Udemy dan dia forEach
lebih menyukai for
ajarannya. Namun, saya telah mencari berbagai hal selama latihan sebagai bagian dari pekerjaan kursus dan saya menemukan lebih banyak rekomendasi untuk menggunakan for
-loop daripada forEach
. Kebanyakan orang tampaknya menyatakan loop for lebih efisien.
Apakah ini sesuatu yang telah berubah sejak kursus ditulis (sekitar tahun 2015) atau benar-benar pro dan kontra masing-masing, yang akan dipelajari dengan lebih banyak pengalaman.
Saran apa pun akan sangat dihargai.
javascript
loops
for-loop
foreach
tonyrobbins
sumber
sumber
for
sulit dikalahkan untuk kecepatan murni.forEach()
memanggil callback untuk setiap iterasi; jadi, itu jelas membawa serta beberapa overhead.map
murni untuk iterasi dan membuang array baru yang dihasilkannya. Saya tidak tahu berapa banyak orang yang harus saya koreksi tentang pilihan fungsi tertentu di situs ini saja.Jawaban:
untuk
for
loop jauh lebih efisien. Ini adalah konstruksi perulangan yang dirancang khusus untuk melakukan iterasi saat suatu kondisi benar , pada saat yang sama menawarkan mekanisme loncatan (umumnya untuk meningkatkan iterator). Contoh:Ini tidak berarti bahwa untuk -loop akan selalu lebih efisien, hanya saja mesin dan browser JS telah mengoptimalkannya untuk itu. Selama bertahun-tahun telah ada kompromi mengenai konstruksi perulangan mana yang lebih efisien (untuk, sementara, mengurangi, membalikkan sementara, dll) - browser dan mesin JS yang berbeda memiliki implementasi mereka sendiri yang menawarkan metodologi berbeda untuk menghasilkan hasil yang sama. Karena browser semakin dioptimalkan untuk memenuhi tuntutan kinerja, secara teoritis
[].forEach
dapat diterapkan sedemikian rupa sehingga lebih cepat atau sebanding dengan afor
.Manfaat:
break
dancontinue
)i<n
bisa apa saja dan tidak terikat pada ukuran array)var i
dauni
tersedia setelah loop berakhir)untuk setiap
.forEach
adalah metode yang terutama beriterasi di atas array (juga di atas yang dapat dihitung lainnya, sepertiMap
danSet
objek). Mereka lebih baru dan memberikan kode yang secara subyektif lebih mudah dibaca. Contoh:Manfaat:
Dalam contoh di atas,
val
akan menjadi parameter dari fungsi yang baru dibuat. Jadi, variabel apa pun yang dipanggilval
sebelum pengulangan, akan menyimpan nilainya setelah pengulangan berakhir.Performa
Kinerja adalah topik yang rumit, yang umumnya membutuhkan pengalaman dalam hal pemikiran atau pendekatan sebelumnya. Untuk menentukan sebelumnya (sambil mengembangkan) berapa banyak pengoptimalan yang mungkin diperlukan, seorang programmer harus memiliki gagasan yang baik tentang pengalaman masa lalu dengan kasus masalah, serta pemahaman yang baik tentang solusi potensial.
Menggunakan jQuery dalam beberapa kasus terkadang terlalu lambat (pengembang berpengalaman mungkin tahu itu), sedangkan di lain waktu mungkin bukan masalah, dalam hal ini kepatuhan lintas browser perpustakaan dan kemudahan melakukan fungsi lain (misalnya, AJAX, penanganan acara) akan sepadan dengan waktu pengembangan (dan pemeliharaan) yang dihemat.
Contoh lainnya adalah, jika kinerja dan optimasi adalah segalanya, tidak akan ada kode lain selain mesin atau perakitan. Jelas bukan itu masalahnya karena ada banyak bahasa tingkat tinggi dan rendah yang berbeda, masing-masing dengan pengorbanannya sendiri. Pengorbanan ini termasuk, tetapi tidak terbatas pada spesialisasi, kemudahan dan kecepatan pengembangan, kemudahan dan kecepatan pemeliharaan, kode yang dioptimalkan, kode bebas kesalahan, dll.
Pendekatan
Jika Anda tidak memiliki pemahaman yang baik jika sesuatu memerlukan kode yang dioptimalkan, umumnya merupakan aturan praktis yang baik untuk menulis kode yang dapat dipelihara terlebih dahulu. Dari sana, Anda dapat menguji dan menentukan apa yang perlu lebih diperhatikan saat diperlukan.
Meskipun demikian, pengoptimalan tertentu yang jelas harus menjadi bagian dari praktik umum dan tidak memerlukan pemikiran apa pun. Misalnya, pertimbangkan loop berikut:
Untuk setiap iterasi loop, JavaScript mengambil
arr.length
, operasi biaya pencarian kunci pada setiap siklus. Tidak ada alasan mengapa ini tidak seharusnya:Ini melakukan hal yang sama, tetapi hanya mengambil
arr.length
satu kali, menyimpan variabel dan mengoptimalkan kode Anda.sumber
[...], if performance and optimization was everything, there would be no other code than machine or assembly.
. Saya percaya bahwa denganlet
pernyataan untuk mendeklarasikan variabel lokal lingkup blok, manfaat keduaforEach
tidak lagi merupakan keuntungan atasfor
pengulangan kecuali dalam lingkungan tanpa dukungan untuklet
.