翻譯--Blazing fast node.js: 10 performance tips from LinkedIn Mobile

1.避免使用同步代碼:javascript

// Good: write files asynchronously
fs.writeFile('message.txt', 'Hello Node', function (err) {
  console.log("It's saved and the server remains responsive!");
});
 
// BAD: write files synchronously
fs.writeFileSync('message.txt', 'Hello Node');
console.log("It's saved, but you just blocked ALL requests!");

code 的github地址java

2.關閉sockect池:node

  nodejs的http客戶端會自動的使用sockect池,默認狀況下,每一臺主機限制你最多使用5個sockect鏈接,sockect重用能保持不少的資源可以在必定範圍內重用,若是你想控制從相同主機取數據的大量請求,這會有不少的瓶頸。在這種狀況下,一個很好的辦法是提升maxSockets 的值或者是完全的關閉sockect池git

var http = require('http');
var options = {.....};
options.agent = false;
var req = http.request(options)

code的github 地址github

3.不要使用nodejs 作靜態資源存儲數據庫

4.在客戶端渲染頁面express

5.使用gzip壓縮session

6.並行app

  試着去處理你的全部阻礙操做,也就是說,並行請求你的遠程服務,數據庫調用,文件訪問,這個將會減小潛在的最慢的請求,而不是全部的在一個隊列中的總和時間,爲了保持比較好的控制回調和錯誤信息,我建議step 框架去作工做流控制框架

7.session 空閒

  LinkedIn mobile 使用express 框架控制請求和響應,不少的express 例子中都包含了以下的配置

app.use(express.session({ secret: "keyboard cat" }));

通常地,session 數據是存儲在內存中,這個將會致使系統開銷,特別是有不少的用戶組,固然你也可使用外部的session 存儲,好比說MongoDB or Redis,可是這樣作的話,就會致使遠程請求session 數據的系統開銷。固然,若是可能,最好的選項是不在服務端存儲session數據。在express 框架中不要包含上述配置你將獲得更好的性能。

8.使用二進制模塊

  若是可能的話,儘可能使用二進制模塊,而不使用javascript 庫,例如:當咱們使用SHA模塊轉換的話,咱們將看到有更好的性能。

// Use built in or binary modules
var crypto = require('crypto');
var hash = crypto.createHmac("sha1",key).update(signatureBase).digest("base64");

9.使用標準的V8而不是使用客戶端的庫

10.保持你的代碼小而簡潔

  時不時的問問本身這幾個問題:

  1.我真的須要這個模塊嗎?

  2.我爲何要使用這個框架?

  3.這個系統開銷值得嗎?

  4.我是否能夠用一個更簡單的方式去實現這個?

 

翻譯文章地址:http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile

相關文章
相關標籤/搜索