Saya memiliki kode JavaScript yang saya jalankan menggunakan node.js
interpreter.
for(var i = 1; i < LIMIT; i++) {
var user = {
id: i,
name: "MongoUser [" + i + "]"
};
db.users.save(user, function(err, saved) {
if(err || !saved) {
console.log("Error");
} else {
console.log("Saved");
}
});
}
Bagaimana saya bisa mengukur waktu yang dibutuhkan oleh operasi penyisipan basis data ini? Saya dapat menghitung perbedaan nilai tanggal setelah dan sebelum potongan kode ini tetapi itu tidak benar karena sifat asinkron dari kode.
javascript
node.js
profiling
Bayangan badai
sumber
sumber
timerlog
yang miripconsole.time()
tetapi dengan fitur tambahan; github.com/brillout/timerlogJawaban:
Gunakan Node.js
console.time()
danconsole.timeEnd()
:sumber
Ada metode yang dirancang untuk ini. Periksa process.hrtime (); .
Jadi, pada dasarnya saya menempatkan ini di bagian atas aplikasi saya.
Lalu saya menggunakannya untuk melihat berapa lama waktu yang dibutuhkan. Berikut adalah contoh dasar yang mencetak konten file teks yang disebut "output.txt":
Inilah tes cepat yang dapat Anda jalankan di terminal (BASH shell):
sumber
process.hrtime(start)
dua kali? Apakah ada alasan khusus untuk itu?Memanggil
console.time('label')
akan merekam waktu saat ini dalam milidetik, kemudian panggilanconsole.timeEnd('label')
akan menampilkan durasi dari titik itu.Waktu dalam milidetik akan dicetak secara otomatis di samping label, jadi Anda tidak perlu membuat panggilan terpisah ke console.log untuk mencetak label:
Untuk informasi lebih lanjut, lihat dokumen pengembang Mozilla di
console.time
.sumber
Terkejut belum ada yang menyebutkan perpustakaan yang baru dibangun:
Tersedia di Node> = 8.5, dan harus di Browser Modern
https://developer.mozilla.org/en-US/docs/Web/API/Performance
https://nodejs.org/docs/latest-v8.x/api/perf_hooks.html#
Node 8.5 ~ 9.x (Firefox, Chrome)
https://repl.it/@CodyGeisler/NodeJsPerformanceHooks
Node 10.x
https://nodejs.org/docs/latest-v10.x/api/perf_hooks.html
sumber
TypeError: performance.getEntriesByName is not a function
di Node v10.4.1Stability: 1 - Experimental
mungkin? :) nodejs.org/docs/latest-v8.x/api/…Bagi siapa pun yang ingin mendapatkan nilai waktu yang berlalu alih-alih output konsol:
gunakan process.hrtime () sebagai saran @ D.Deriso, di bawah ini adalah pendekatan saya yang lebih sederhana:
sumber
sumber
var start = process.hrtime(); ... var end = process.hrtime(start);
untuk mendapatkan waktu resolusi tinggi (jika saya perlu mengharapkan akurasi sub milidetik)Pertanyaan lama tetapi untuk API sederhana dan solusi ringan; Anda dapat menggunakan perfy yang menggunakan real time resolusi tinggi (
process.hrtime
) secara internal.Perhatikan bahwa setiap kali
perfy.end(label)
dipanggil, instance itu dihancurkan secara otomatis.Pengungkapan: Menulis modul ini, terinspirasi oleh jawaban D.Deriso . Dokumen di sini .
sumber
Anda bisa mencoba Benchmark.js . Ini mendukung banyak platform di antara mereka juga node.js.
sumber
Anda juga dapat mencoba exectimer . Ini memberi Anda umpan balik seperti:
[Sunting] Bahkan ada cara yang lebih sederhana sekarang untuk menggunakan exectimer karena sekarang dapat membungkus kode yang akan diukur. Kode Anda dapat dibungkus seperti ini:
sumber
Saya memiliki masalah yang sama saat pindah dari AWS ke Azure
Untuk mengekspresikan & aws, Anda sudah dapat menggunakan, waktu yang ada () dan timeEnd ()
Untuk Azure, gunakan ini: https://github.com/manoharreddyporeddy/my-nodejs-notes/blob/master/performance_timers_helper_nodejs_azure_aws.js
Time () dan timeEnd () ini menggunakan fungsi hrtime () yang ada, yang memberikan real time resolusi tinggi.
Semoga ini membantu.
sumber
Dan opsi lain adalah menggunakan alat debug-cepat :
Dengan mudah menawarkan panel profil:
Juga. untuk menambahkan jawaban di atas, Anda dapat memeriksa jawaban ini untuk mengaktifkan kode profil apa pun hanya untuk lingkungan pengembangan.
sumber