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:
for (var i=0, n=arr.length; i < n; ++i ) {
...
}
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 a for
.
Manfaat:
- efisien
- penghentian loop awal (penghargaan
break
dan continue
)
- kontrol kondisi (
i<n
bisa apa saja dan tidak terikat pada ukuran array)
- pelingkupan variabel (
var i
daun i
tersedia setelah loop berakhir)
untuk setiap
.forEach
adalah metode yang terutama beriterasi di atas array (juga di atas yang dapat dihitung lainnya, seperti Map
dan Set
objek). Mereka lebih baru dan memberikan kode yang secara subyektif lebih mudah dibaca. Contoh:
[].forEach((val, index)=>{
...
});
Manfaat:
- tidak melibatkan pengaturan variabel (mengulangi setiap elemen dari array)
- functions / arrow-functions lingkup variabel ke blok
Dalam contoh di atas, val
akan menjadi parameter dari fungsi yang baru dibuat. Jadi, variabel apa pun yang dipanggil val
sebelum pengulangan, akan menyimpan nilainya setelah pengulangan berakhir.
- secara subyektif lebih dapat dipelihara karena mungkin lebih mudah untuk mengidentifikasi apa yang sedang dilakukan kode - iterasi dari enumerable; sedangkan for-loop dapat digunakan untuk sejumlah skema perulangan
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:
for (var i=0; i < arr.length; ++i ){}
Untuk setiap iterasi loop, JavaScript mengambil arr.length
, operasi biaya pencarian kunci pada setiap siklus. Tidak ada alasan mengapa ini tidak seharusnya:
for (var i=0, n=arr.length; i < n; ++i){}
Ini melakukan hal yang sama, tetapi hanya mengambil arr.length
satu kali, menyimpan variabel dan mengoptimalkan kode Anda.