Node.js 最佳實踐

原文:Production best practices: performance and reliability

文章主要討論怎么提高Node工程的性能和可靠性夹抗,全文分為兩大部分:

  1. 開發(fā)的注意事項
  2. 部署的注意事項

開發(fā)

1. 使用gzip壓縮

Node有compression模塊鹅颊;高并發(fā)場景下,最好借助代理(如:Nginx)實現(xiàn)gzip壓縮功能

2. 不要使用同步函數(shù)

高并發(fā)場景下肩杈,同步函數(shù)可能極大的影響系統(tǒng)的性能柴我。
Node4.0+上的版本,--trace-sync-io可打印出工程中使用到的同步函數(shù)的信息扩然。

3. 正確打印日志

console.log() 或 console.err()是同步函數(shù)艘儒,它會阻塞后續(xù)程序的執(zhí)行,盡量少用夫偶。
debug模式下界睁,采用模塊debug 可以借組環(huán)境變量,這樣在發(fā)布后就可以不輸出debug的log兵拢。
如果想記錄工程的流量或者API調(diào)用翻斟,可以采用winston 或者bunyan ,文章Comparing Winston and Bunyan Node.js Logging給出了兩者的對比说铃。

4. 合理的處理異常

Node工程中出現(xiàn)沒有被捕獲的異常時服務(wù)會掛掉访惜,所以首先要保證服務(wù)能自動重啟嘹履,好在它的重啟比較快;另外可通過try catchpromise捕獲異常债热。

app.get('/search', function (req, res) {
  // Simulating async operation
  setImmediate(function () {
    var jsonStr = req.query.params;
    try {
      var jsonObj = JSON.parse(jsonStr);
      res.send('Success');
    } catch (e) {
      res.status(400).send('Invalid JSON string');
    }
  });
});

app.get('/', function (req, res, next) {
  // do some sync stuff
  queryDb()
    .then(function (data) {
      // handle data
      return makeCsv(data)
    })
    .then(function (csv) {
      // handle csv
    })
    .catch(next);
});

不要捕獲uncaughtException事件砾嫉,服務(wù)該掛掉就掛掉,否者可能引入不必要的問題窒篱。

部署

1. 把NODE_ENV設(shè)置為production

NODE_ENV為production時焰枢,Express會緩存視圖模板、css文件舌剂,產(chǎn)生更少的錯誤信息济锄;測試The drastic effects of omitting NODE_ENV in your Express.js applications表明啟用了cache,性能提升1/3霍转!

2. 確認服務(wù)能自動重啟

借助pm2荐绝、forever等工具實現(xiàn)自動重啟;并且要實現(xiàn)開機時的服務(wù)自啟動避消。

3. 服務(wù)運行在cluster模式

多核的服務(wù)器低滩,通過cluster可以提升服務(wù)性能。

4. 緩存請求結(jié)果

可以通過Nginx實現(xiàn)緩存岩喷,提高同一資源多次請求的速度恕沫。

5. 使用負載均衡

負載均衡可以提高集群服務(wù)的數(shù)量

6. 使用反向代理

和工程關(guān)聯(lián)不大的靜態(tài)資源的請求,可以通過Nginx的反應(yīng)代理實現(xiàn)纱意。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婶溯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子偷霉,更是在濱河造成了極大的恐慌迄委,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件类少,死亡現(xiàn)場離奇詭異叙身,居然都是意外死亡,警方通過查閱死者的電腦和手機硫狞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門信轿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人残吩,你說我怎么就攤上這事财忽。” “怎么了世剖?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵定罢,是天一觀的道長。 經(jīng)常有香客問我旁瘫,道長祖凫,這世上最難降的妖魔是什么琼蚯? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮惠况,結(jié)果婚禮上遭庶,老公的妹妹穿的比我還像新娘。我一直安慰自己稠屠,他們只是感情好峦睡,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著权埠,像睡著了一般榨了。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上攘蔽,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天龙屉,我揣著相機與錄音,去河邊找鬼满俗。 笑死转捕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唆垃。 我是一名探鬼主播五芝,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辕万!你這毒婦竟也來了枢步?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蓄坏,失蹤者是張志新(化名)和其女友劉穎价捧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涡戳,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年脯倚,在試婚紗的時候發(fā)現(xiàn)自己被綠了渔彰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡推正,死狀恐怖恍涂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情植榕,我是刑警寧澤再沧,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站尊残,受9級特大地震影響炒瘸,放射性物質(zhì)發(fā)生泄漏淤堵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一顷扩、第九天 我趴在偏房一處隱蔽的房頂上張望拐邪。 院中可真熱鬧,春花似錦隘截、人聲如沸扎阶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽东臀。三九已至,卻和暖如春犀农,著一層夾襖步出監(jiān)牢的瞬間惰赋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工井赌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谤逼,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓仇穗,卻偏偏與公主長得像流部,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纹坐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一年前枝冀,我們寫了一篇文章How to Become a Better Node.js Developer in 2...
    慕容跳凱閱讀 300評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)耘子,斷路器果漾,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 今天天氣有些冷绒障,因為始終是陰天,掌管著天空的人可能正在嗑著瓜子看著電視劇捍歪,隨手亂按雨水的開關(guān)按鈕户辱,一會兒下雨,一會...
    王小肥皂閱讀 544評論 0 1
  • 五蓮縣實驗小學(xué)2014級3班 李家晟 說起我的家鄉(xiāng)糙臼,人們自然第一個想起五蓮山庐镐,據(jù)說五蓮縣就是因為五蓮山而得名。...
    李家晟閱讀 211評論 0 2
  • 今晚三個區(qū)都加班搬鐵板变逃,我們搬了三趟才下班真的累到飛起必逆,而且搬的過程中汗沒停過,最后實在受不了就把衣服脫了哪怕有很...
    承思而行閱讀 156評論 0 0