非阻塞I/O能夠使CPU與I/O並不依賴,能夠更大程度的利用資源html
對於網絡應用,並行帶來的優點更大,利於分佈式和雲的應用node
因爲調用了c/c++的擴展模塊,node的性能較高c++
異常處理編程
不能使用try/catch/final對異步編程進行異常處理,由於發生異常的代碼不必定在本次事件循環中執行,因此有可能捕捉不到網絡
解決方法:給callback第一個參數傳遞是否報錯,未報錯則返回null報錯則返回error對象。多線程
原則:在編寫自定義異步方法時,必須執行調用者傳入的參數,必須正確返回參數callback(null, results)異步
對用戶調用的回調函數進行try/catch分佈式
try { req.body = JSON.parse(buf, options.reviver); callback(); } catch (err){ err.body = buf; err.status = 400; callback(err); } |
這樣就會致使callback中出錯也會被catch到,致使調用兩次callback異步編程
解決方法:函數
try { req.body = JSON.parse(buf, options.reviver); } catch (err){ err.body = buf; err.status = 400; callback(err); } callback(); |
阻塞代碼:不要用while來阻塞,用setTimeout
多線程:用child_process