前陣子用 node.js 寫了一個上線的服務, 沒有意外的話接下來有一大段時間不會碰 node.js。備忘一下有用到和以後可能會用到的東西。
何時以及為什麼要用 node.js?
node.js 開發
主要弱點
- main loop 被 block: fcamel 技術隨手記: 找出 node.js 中 block main loop 的程式
- CPU bound: 參考 Why you should use Node.js for CPU-bound tasks - Neil Kandalgaonkar。視不同需求可用不同解法:
- 用 multi-process 增加 throughput 還有減少被 slow response 拖慢其它 request: 用 cluster
- 用 multi-thread 避免 slow response 拖慢其它 request: 用 threads_a_gogo
- 甚至可以將 CPU bound 的工作丟給 browser 的 WebWorker 作, 不過這樣架構也會變複雜, 沒強烈必要不會走到這步吧。
- callback hell: 用 Promise 解 (JS 6 新 API), bluebird 是效率不錯的 backport, 可用在目前的 JS 5 。對於既有沒用 Promise 的 module 和函式, 也有提供 API 直接轉換物件成使用 Promise API, 不用改程式。
- Why I am switching to promises 提到 bluebird 效率不錯以及其它好處。
- 還有 async 也有助於減少雜亂的 callback codes, 不確定 bluebird 是否可完全替代 async 提供的功能。
- 幾年後 JS 7 的新語法 async/await 普及後, 可以考慮用它們取代 promise。現階段要 transcompile 後才能在 JS 5 內用。
其它
- coding style: callback 函式的第一個參數總是放 error, 沒有 error 時傳入 null。
- 用 nodemon 在更新程式後自動更新。
- logger: 有很多家, 我是用 winston, 還不錯用, 寫入 JSON log, 再用 jq 讀。
- 用 posix 使用缺少的 POSIX API (如 setrlimit), 還有可以參考它如何包 C/C++ 程式給 node.js 用。
- web server: 大家都用 express, 要用 HTTPS 或 POST 需要作些設定。看起來彈性很大的 web server。
- 用舊版 node.js (0.10以前) 記得設 http max socket 提高對每個 domain 送出的連線數量。
沒有留言:
張貼留言