Akankah penggunaan fitur debugging console.log
mengurangi kinerja eksekusi JavaScript? Apakah ini akan memengaruhi kecepatan eksekusi skrip di lingkungan produksi?
Apakah ada pendekatan untuk menonaktifkan log konsol di lingkungan produksi dari satu lokasi konfigurasi?
javascript
performance
Sudantha
sumber
sumber
console.log
membutuhkan ~ 50msJawaban:
Jika Anda akan memiliki ini di situs publik atau sesuatu, siapa pun yang memiliki sedikit pengetahuan tentang penggunaan alat pengembang dapat membaca pesan debug Anda. Bergantung pada apa yang Anda catat, ini mungkin bukan perilaku yang diinginkan.
Salah satu pendekatan terbaik adalah menggabungkannya ke
console.log
dalam salah satu metode Anda, dan di mana Anda dapat memeriksa kondisi dan menjalankannya. Dalam build produksi, Anda dapat menghindari fungsi-fungsi ini. Ini pertanyaan Stack Overflow berbicara secara rinci tentang bagaimana melakukan hal yang sama dengan menggunakan compiler Penutupan .Jadi, untuk menjawab pertanyaan Anda:
meski hanya diabaikan.sumber
conosle.log
akan tetap membuat hit ke fungsi yang diganti bukan?console.log
ke log memang menyebabkan kebocoran memori karena browser mempertahankan struktur objek untuk memungkinkan pengembang memperluas log.Sebenarnya,
console.log
ini jauh lebih lambat daripada fungsi kosong. Menjalankan tes jsPerf ini di Chrome 38 saya memberikan hasil yang menakjubkan:console.log
adalah sekitar 10 000 kali lebih lambat daripada memanggil fungsi kosong,Bukan berarti Anda akan melihat kelambatan kinerja jika Anda memiliki sejumlah
console.…
panggilan yang masuk akal yang diaktifkan sekali (seratus akan memakan waktu 2 md pada pemasangan Chrome saya - atau 20 md saat konsol terbuka). Tetapi jika Anda memasukkan barang ke konsol berulang kali - misalnya, menghubungkannyarequestAnimationFrame
- itu bisa membuat semuanya tersendat.Memperbarui:
Dalam pengujian ini saya juga telah memeriksa ide "log tersembunyi" khusus untuk produksi - memiliki variabel yang menyimpan pesan log, tersedia sesuai permintaan. Ternyata begitu
console.log
,sumber
console.log
. Keduanya adalah fungsi yang menghasilkan efek samping.console.log
dengan sendirinya tidak terlalu memengaruhi kinerja dengan cara yang akan Anda perhatikan kecuali Anda mengikatnya ke penangan gulir / ubah ukuran. Ini disebut banyak dan jika browser Anda harus mengirim teks ke konsol seperti 30 / 60x per detik itu bisa menjadi jelek. Dan kemudian ada bug IE yang tidak memungkinkan Anda untuk memilikinyaconsole.log
sama sekali dengan konsol ditutup :(logging-on x 3,179 ops/sec ±2.07% (56 runs sampled)
logging-off x 56,058,330 ops/sec ±2.87% (56 runs sampled)
logging-off-stringify x 1,812,379 ops/sec ±3.50% (58 runs sampled)
log-nothing x 59,509,998 ops/sec ±2.63% (59 runs sampled)
sumber
Jika Anda membuat pintasan ke konsol dalam skrip inti umum, misalnya:
dan kemudian gunakan con.log ("message") atau con.error ("pesan kesalahan") di seluruh kode Anda, pada produksi Anda dapat dengan mudah memasang ulang con di lokasi inti untuk:
sumber
console.log = function(){}
Tentunya
console.log()
akan menurunkan performa program Anda karena membutuhkan waktu komputasi.Letakkan kode ini di awal skrip Anda untuk mengganti fungsi console.log standar menjadi fungsi kosong.
sumber
Panggilan fungsi apa pun akan sedikit mengurangi kinerja. Tetapi beberapa
console.log
seharusnya tidak memiliki efek yang nyata.Namun itu akan membuang kesalahan yang tidak ditentukan di browser lama yang tidak mendukung
console
sumber
Kinerja yang dicapai akan minimal, namun di browser lama ini akan menyebabkan kesalahan JavaScript jika konsol browser pengguna tidak terbuka
log is not a function of undefined
. Ini berarti semua kode JavaScript setelah panggilan console.log tidak akan dijalankan.Anda dapat membuat pembungkus untuk memeriksa apakah
window.console
merupakan objek yang valid, lalu memanggil console.log di pembungkusnya. Sesuatu yang sederhana seperti ini akan berhasil:Ini biola: http://jsfiddle.net/enDDV/
sumber
Saya membuat tes jsPerf ini: http://jsperf.com/console-log1337
Sepertinya tidak perlu waktu lebih lama dari panggilan fungsi lainnya.
Bagaimana dengan browser yang tidak memiliki API konsol? Jika Anda perlu menggunakan console.log untuk debugging, Anda dapat menyertakan skrip dalam penerapan produksi untuk mengganti API konsol, seperti yang disarankan Paul dalam jawabannya.
sumber
Saya melakukannya dengan cara ini untuk mempertahankan tanda tangan asli dari metode konsol. Di lokasi umum, dimuat sebelum JS lainnya:
Kemudian di seluruh kode
sumber