Suatu kali, kami mewawancarai kandidat posisi developer menengah yang tidak dapat menjawab pertanyaan sederhana yang melibatkan loop 0, dan 1 metode Array daripada loop sederhana dalam JavaScript?” Show
Gaya pemrograman deklaratif sangat ekspresif, lebih mudah ditulis, dan jauh lebih mudah dibaca. Lebih baik 99% dari waktu, tetapi tidak ketika kinerja penting. Loop biasanya tiga kali atau lebih lebih cepat daripada rekan deklaratifnya. Itu tidak menambah perbedaan yang signifikan di sebagian besar aplikasi. Namun, saat memproses data dalam jumlah besar di beberapa aplikasi intelijen bisnis, pemrosesan video, perhitungan ilmiah, atau mesin game, ini akan berdampak besar pada kinerja secara keseluruhan. Kami telah menyiapkan beberapa tes untuk menunjukkannya. Semua kode tersedia di GitHub. Jangan ragu untuk bermain-main dengannya Kami akan senang umpan balik dan kontribusi Anda Daftar isiTentang tesAplikasi pengujian menggunakan pustaka benchmark untuk mendapatkan hasil yang signifikan secara statistik. Masukan untuk tes adalah larik satu juta objek dengan struktur 2. Inilah kode yang menghasilkan array ini
Kami menggunakan laptop Lenovo T480s dengan Intel Core i5-8250, RAM 16Gb yang menjalankan Ubuntu 20. 04 LTS dengan Node v14. 16. 0 untuk mendapatkan hasil Himpunan. forEach vs untuk dan untuk. dariOperasi per detik, lebih tinggi lebih baik Tes ini menghitung jumlah 3 dan 4 untuk setiap elemen array dan menyimpannya ke 5
Kami sengaja membuat bidang 5 di objek selama pembuatan array untuk menghindari perubahan struktur objek karena akan memengaruhi tolok ukurBahkan dengan pengujian sederhana ini, loop hampir tiga kali lebih cepat. Loop 7 sedikit di depan yang lain, tetapi perbedaannya tidak signifikan. Optimalisasi mikro dari loop 8 yang berfungsi dalam beberapa bahasa lain, seperti menyimpan panjang array dalam cache atau menyimpan elemen untuk akses berulang dalam variabel sementara, tidak memiliki efek apa pun dalam JavaScript yang berjalan di V8. Mungkin V8 sudah melakukannya di bawah tendaKarena 1 tidak jauh berbeda dari 7 loop, kami tidak melihat banyak gunanya menggunakannya pada loop tradisional dalam banyak kasus. Layak digunakan hanya ketika Anda sudah memiliki fungsi untuk dipanggil pada setiap elemen array. Dalam hal ini, ini adalah one-liner, dengan penurunan kinerja nol
Himpunan. peta vs untuk vs untuk. dariOperasi per detik, lebih tinggi lebih baik Tes ini memetakan larik ke larik lain dengan 1 untuk setiap elemen
Loop juga jauh lebih cepat di sini. 7 membuat array kosong dan 3-es setiap elemen baru
Ini bukan pendekatan yang optimal karena array dialokasikan kembali secara dinamis dan dipindahkan di bawah tenda. Versi 8 melakukan pra-alokasi array dengan ukuran target dan menyetel setiap elemen menggunakan indeks
Di sini, kami juga menguji apakah destrukturisasi berdampak pada kinerja. Dengan 7 hasilnya tidak jauh berbeda dan mungkin hanya kebetulan tolok ukurHimpunan. kurangi vs untuk dan untuk. dariOperasi per detik, lebih tinggi lebih baik Di sini kita hanya menghitung jumlah _3 dan 4 untuk seluruh array
Baik 8 dan 7 adalah 3. 5 kali lebih cepat dari _1. Namun, loop jauh lebih bertele-tele
Menulis bahwa banyak baris kode hanya untuk jumlah sederhana harus memiliki alasan yang kuat, jadi kecuali kinerjanya sangat penting, 0 jauh lebih baik. Tes lagi menunjukkan tidak ada perbedaan antara loopKesimpulanTolok ukur membuktikan bahwa pemrograman imperatif dengan loop menghasilkan kinerja yang lebih baik daripada menggunakan metode Array yang nyaman. Memanggil fungsi panggilan balik tidak gratis dan bertambah untuk array besar. Namun, untuk kode yang lebih kompleks daripada jumlah sederhana, tidak akan ada banyak perbedaan relatif, karena penghitungannya sendiri akan memakan waktu lebih lama Kode imperatif jauh lebih bertele-tele dalam banyak kasus. Lima baris kode untuk jumlah yang sederhana terlalu banyak, dan 1 hanya satu baris. Di sisi lain, 1 hampir sama dengan 8 atau 7, hanya lebih lambat. Tidak banyak perbedaan kinerja antara kedua loop, dan Anda dapat menggunakan algoritme apa pun yang lebih cocokTidak seperti di AssemblyScript, mikro-optimasi dari 8 loop tidak masuk akal untuk array di JavaScript. V8 sudah melakukan pekerjaan dengan baik dan bahkan mungkin menghilangkan pemeriksaan batas jugaPra-alokasi array dengan panjang yang diketahui jauh lebih cepat daripada mengandalkan pertumbuhan dinamis dengan 3. Kami juga telah mengonfirmasi bahwa penghancuran itu gratis dan harus digunakan kapan pun nyamanPengembang yang baik harus mengetahui cara kerja kode dan memilih solusi terbaik dalam setiap situasi. Pemrograman deklaratif, dengan kesederhanaannya, paling sering menang. Menulis kode tingkat rendah hanya masuk akal dalam dua kasus Bisakah kita menggunakan peta alih-alih for loop di JavaScript?Gunakan map() alih-alih loop for()
. Jika Anda hanya memiliki pengetahuan tentang for() loop dalam JavaScript, artikel ini akan meminta Anda untuk memahami sintaks Ekspresi Fungsi Panah (a. k. a. fungsi "panah gemuk"). map() function works. If you only have knowledge of for() loops in JavaScript, this article will require you to understand the Arrow Function Expression syntax (a.k.a. “fat arrow” functions).
Apa yang bisa kita gunakan sebagai pengganti for loop di JavaScript?> forEach()
. Alternatif untuk perulangan “untuk” ini hanya digunakan ketika kita tidak memiliki fungsi orde tinggi yang lebih baik untuk digunakan dalam situasi tersebut.
Apakah map lebih efisien daripada for loop?Kesimpulan Pertama. Peta lebih cepat dari loop?. Tapi kita berada dalam konteks milidetik. Tetapi ketika kita membutuhkan manajemen data dalam jumlah besar, milidetik sangat penting. Informasi kurva menunjukkan kepada kita bahwa peta memiliki efisiensi yang sedikit rendah dibandingkan dengan iterasi loop
Mana yang lebih cepat peta atau untuk loop JavaScript?Anda dapat melihat bahwa for loop 3 kali lebih cepat daripada metode array seperti forEach map dan reduce . Setelah menerima elemen array, metode array menjalankan fungsi callback untuk setiap elemen. |