2013-09-24 38 views
4

我有一個nodejs應用程序,其中res.render express的方法需要約400毫秒的阻塞方式。我如何處理這個以非阻塞的方式執行?我的apache基準測試需要12秒來執行大約30個併發請求。我如何以更好的方式實現這一點?以異步方式執行Express res.render

var start = +new Date; 
//fetch data from redis 
console.log('time taken to fetch data from redis ' + (+new Date - start)); //30 ms 
res.render('some_jade_view', params); 
console.log('time taken to render data ' + (+new Date - start)); //530 ms 

我試過process.nextTick但它沒有多大幫助,ab結果是一樣的。

+0

向我們展示一些代碼。特別是帶有.render調用的部分。 – Krasimir

+0

@Krasimir增加了代碼,但這並沒有什麼幫助,因爲它是花費500毫秒時間渲染的玉石視圖。現在,我注意到它本質上是阻塞的。 'res'是傳遞給快速路由的響應對象。 – user883499

+0

玉的觀點是非常複雜的?你有沒有添加任何可能延遲渲染的中間件? – WiredPrairie

回答

3

我想你應該真的看看https://github.com/caolan/async

直接從異步的回購:

異步是一種實用工具模塊,用於異步JavaScript的工作提供了直接的,強大的功能 。 (...)

異步提供圍繞20功能,包括通常的「功能性」 嫌疑人(地圖,減少,過濾器,每個...)以及爲異步控制流一些常見模式 (並聯,串聯,瀑布...)。所有 這些函數假定您遵循node.js約定,即提供 單個回調作爲異步函數的最後一個參數。

乾杯。

編輯:我不確定以異步方式呈現視圖是否真的能幫助您減少時間。您可能需要在客戶端實現一個流,以獲取並模擬數據。您可以使用像Angular這樣的前端框架,或者手動完成。