如果您的Node.js代碼散亂地與console.log語句引發性能問題?是否值得調試/生產切換此開/關?我意識到日誌記錄對於一般製作來說非常重要 - 但是如果控制檯輸出的性能受到影響,我通常會很好奇嗎?Node.js console.log性能
在chrome中的客戶端腳本中,如果控制檯處於打開狀態,它肯定會降低性能。
如果您的Node.js代碼散亂地與console.log語句引發性能問題?是否值得調試/生產切換此開/關?我意識到日誌記錄對於一般製作來說非常重要 - 但是如果控制檯輸出的性能受到影響,我通常會很好奇嗎?Node.js console.log性能
在chrome中的客戶端腳本中,如果控制檯處於打開狀態,它肯定會降低性能。
編輯:
的console.log是同步的,它是阻斷事件循環
我覺得這是低垂的果實,並且幾乎不會給你任何當您禁用日誌記錄時(如果在關鍵部分中嚴格使用),可能會導致速度緩慢。大概的console.log在純C實現也有一些可用的模塊,它可以在生產中禁用日誌記錄,就像你可以用socket.io做到:
console.log
減慢了Chrome瀏覽器的速度,因爲它實際上在每次調用時都與DOM接口。整個inspect element
系統實際上只是大量的DOM元素。當您在瀏覽器中呼叫console.log
時,它必須在每次呼叫時向console
添加一個新元素。
您可以通過右鍵點擊console
中的元素並單擊inspect element
來查看console.log
是否僅僅是HTML。這實際上會開啓一個新的console
檢查一個已經存在的console
。 :D
如果您真的擔心表現,您可以隨時完全刪除console.log
功能(沒有真正建議,因爲它可能會令人困惑)。您在瀏覽器或服務器端基本上可以使用noop
的功能。沒有更多的console.log
沒有更多的高速衝擊:d
console.log=function(){};
感謝您的答案,我投票贊成但選擇@Alfred作爲答案,因爲它專門爲節點回答。但是關於Chrome的信息以及爲什麼它不同是有用的。 – j03m
這很酷....:D – William
node.js console.log不與DOM – UpTheCreek
正如上面所說的,console.log
是異步非阻塞的,所以它不會減慢您的應用程序,除了一個刻度的函數調用太多。
但是,在生產環境中部署某些級別的日誌時,不要直接使用console.log,而是使用某個模塊來關閉某些級別的日誌是一種好習慣。 @Alfred列出了一些好的。
Nodejs官方博客發佈了一篇文章,建議使用JSON格式進行日誌記錄,在Service logging in JSON with Bunyan和Bunyan for nodejs之間進行檢查確實值得嘗試。
請注意''console.log'是**同步**,它阻止事件循環 – NoNameProvided
node.js中的console.log調用是同步的(!)並阻塞事件循環。我剛剛經歷過,當我從pg執行(異步)sql查詢記錄結果時。僅記錄20個項目及其(少數)屬性將我的本地機器的性能從3ms降低到300ms。
@Raynos比甚至更好,但仍然使用庫有日誌級別可以派上用場。 – Alfred
太棒了!拯救生命! –
@Raynos錯了。它極大地影響性能。我剛剛在console.log中用我的'GAMES'對象中的60,000個鍵進行了測試。然後,簡單地做一個'for in'來檢查一個屬性是否存在,而控制檯在檢查之前記錄GAMES對象。並且有明顯的延遲。 (3-5秒)我刪除了控制檯日誌並重新檢查了該屬性,它是即時的。這是一個巨大的問題,因爲如果您在節點內使用速率限制器,那麼延遲會使您的系統非常脆弱。 (限制器將無法正常運行(或任何代碼),直到io完成,並且非常危險)。 –