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 Mana yang lebih cepat untuk Setiap atau filter dalam JavaScript?Pertama saya akan menjalankan benchmark dengan 4 metode JS yang paling umum digunakan untuk loop. Seperti yang Anda lihat, forEach memiliki performa terbaik dari 4 . Alasan mengapa forEach lebih cepat daripada peta dan filter adalah karena tidak akan mengembalikan apa pun setelah selesai, hanya tidak terdefinisi tetapi peta dan filter akan mengembalikan array baru.
Apakah filter lebih baik daripada forEach?Perbedaan utama antara forEach dan filter adalah forEach hanya mengulang array dan mengeksekusi callback tetapi filter mengeksekusi callback dan memeriksa nilai kembaliannya. If the value is true element remains in the resulting array but if the return value is false the element will be removed for the resulting array.
Mana yang lebih cepat untuk Setiap atau kurangi?Lima baris kode untuk penjumlahan sederhana terlalu banyak, dan pengurangan hanya satu baris. Sebaliknya, . forEach hampir sama dengan for atau for. dari , hanya lebih lambat . Tidak ada banyak perbedaan kinerja antara kedua loop, dan Anda dapat menggunakan algoritme apa pun yang lebih cocok.
Apa loop tercepat dalam JavaScript?Loop tercepat adalah for loop, baik dengan dan tanpa panjang caching memberikan kinerja yang sangat mirip. . Loop sementara dengan pengurangan kira-kira 1. 5 kali lebih lambat dari for loop Sebuah loop menggunakan fungsi panggilan balik (seperti forEach standar), kira-kira 10 kali lebih lambat daripada loop for |