4

res.renderExpressのメソッドがブロッキング方法で約 400 ミリ秒かかる nodejs アプリケーションがあります。これをブロックしない方法で実行するにはどうすればよいですか? 私の Apache ベンチマークでは、約 30 の同時リクエストを実行するのに 12 秒かかります。これをより良い方法で実装するにはどうすればよいですか?

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の結果は同じです。

4

1 に答える 1

4

https://github.com/caolan/asyncを実際に確認する必要があると思います。

Async のリポジトリから直接:

Async は、非同期 JavaScript を操作するための簡単で強力な機能を提供するユーティリティ モジュールです。(...)

Async は、通常の「機能的な」容疑者 (マップ、リデュース、フィルター、それぞれなど) と、非同期制御フローの一般的なパターン (並列、シリーズ、ウォーターフォールなど) を含む約 20 の関数を提供します。これらの関数はすべて、非同期関数の最後の引数として単一のコールバックを提供するという node.js 規則に従っていることを前提としています。

乾杯。

編集:ビューを非同期でレンダリングすることが実際に時間を短縮するのに役立つかどうかはわかりません。クライアント側にストリームを実装して、データを取得してテンプレート化することをお勧めします。そのためにAngularのようなフロントエンドフレームワークを使用するか、手動で行うことができます.

于 2013-09-24T11:21:02.780 に答える