Apakah ada paket yang membantu saya mengukur kode JavaScript? Saya tidak mengacu pada Firebug dan alat semacam itu.
Saya perlu membandingkan 2 fungsi JavaScript berbeda yang telah saya terapkan. Saya sangat akrab dengan modul Perl's Benchmark ( Benchmark.pm ) dan saya mencari sesuatu yang serupa di JavaScript.
Apakah penekanan pada pembandingan kode JavaScript sudah berlebihan? Bisakah saya lolos dengan pengaturan waktu hanya dengan satu kali menjalankan fungsi?
javascript
benchmarking
Ionic Walrus
sumber
sumber
Jawaban:
Cukup waktu beberapa iterasi dari setiap fungsi. Satu iterasi mungkin tidak akan cukup, tetapi (tergantung pada seberapa kompleks fungsi Anda) di suatu tempat yang mendekati 100 atau bahkan 1.000 iterasi harus melakukan pekerjaan itu.Firebug juga memiliki profiler jika Anda ingin melihat bagian mana dari fungsi Anda yang memperlambatnya.Sunting: Untuk pembaca selanjutnya, jawaban di bawah ini yang merekomendasikan JSPerf harus menjadi jawaban yang benar. Saya akan menghapus milik saya, tetapi saya tidak bisa karena telah dipilih oleh OP. Ada lebih banyak hal untuk pembandingan daripada hanya menjalankan banyak iterasi, dan JSPerf akan mengurusnya untuk Anda.
sumber
jsperf.com adalah situs masuk untuk menguji kinerja JS. Mulailah dari sana. Jika Anda memerlukan kerangka kerja untuk menjalankan pengujian Anda sendiri dari baris perintah atau skrip, gunakan Benchmark.js , pustaka tempat jsperf.com dibuat.
Catatan: Siapa pun yang menguji kode Javascript harus mempelajari perangkap "microbenchmarks" (pengujian kecil yang menargetkan fitur atau operasi tertentu, bukan pengujian yang lebih kompleks berdasarkan pola kode dunia nyata). Pengujian semacam itu dapat berguna tetapi rentan terhadap ketidakakuratan karena cara kerja runtime JS modern. Presentasi Vyacheslav Egorov tentang kinerja dan pembandingan patut ditonton untuk mengetahui sifat masalah.
Sunting: Referensi yang dihapus untuk pekerjaan JSLitmus saya karena tidak lagi relevan atau berguna.
sumber
Hanya menambahkan pengatur waktu cepat ke dalam campuran, yang mungkin berguna bagi seseorang:
Idealnya itu akan ditempatkan di kelas, dan tidak digunakan sebagai global seperti yang saya lakukan untuk tujuan contoh di atas. Menggunakannya akan sangat sederhana:
sumber
performance.now()
daripadaDate()
developer.mozilla.org/en-US/docs/Web/API/Performance/nowCaranya sederhana.
sumber
Saya telah menggunakan implementasi sederhana dari jawaban @musicfreaks ini. Tidak ada fitur, tetapi sangat mudah digunakan. Ini
bench(function(){return 1/2;}, 10000, [], this)
akan menghitung 1/2 10.000 kali.sumber
Sangat sulit untuk menulis tolok ukur lintas-browser yang layak. Cukup mengatur waktu sejumlah iterasi yang telah ditentukan sebelumnya dari kode Anda sama sekali tidak antipeluru .
Seperti yang sudah disarankan oleh @broofa, lihat jsPerf . Ini menggunakan Benchmark.js di belakang layar.
sumber
jika menulis skrip patokan khusus, pastikan untuk mencatat bahwa beberapa browser menerapkan manipulasi dom hanya setelah fungsi yang ditentukan berakhir. Detail lebih lanjut di sini http://www.quirksmode.org/blog/archives/2009/08/when_to_read_ou.html
sumber
Jika Anda membutuhkan sesuatu yang sederhana, Anda dapat melakukannya seperti ini:
Berikut adalah contoh kodenya
sumber