2016-03-24 6 views
1

カスタムアナリティクスバックエンドを実装したNodeJS Expressアプリケーションがあります。ここで、フィーチャーフォンのようなJSを無効にしたブラウザーの場合、トラッキングメカニズムを実装する方法を決定しています。非同期呼び出しを行うExpressミドルウェア

我々が検討している設計手法の1つは、すべての要求を傍受し、要求/コンテキストからパラメータを抽出し、バックエンドに送信するミドルウェアを作成することです。これは非常に拡張性が高く、私たちのようなカスタムアナリティクスソリューションには理にかなっています。

Googleアナリティクスのようなトラッキングピクセルを作成し、そこからデータを抽出する方法もあります。しかし、これは、GAとは異なり、パラメータやデータ構造がいつでも変化したり拡大したりする可能性があるため、カスタムトラッキングソリューションのためのスケーラビリティの低いソリューションと思われます。

私の質問はこれです - 非同期要求を行うミドルウェアを作成する面がありますか?私たちのサーバーへのすべての要求がこのミドルウェアを通過するので、それを作成している間に認識する必要があるものはありますか?私たちは非常に大きなアプリで、1分間に何十万人ものトラフィックがあります。

+0

Node.jsは完全に非同期です。問題は何ですか?問題は、同期の作業を行う場合に発生する可能性がありますが、すべてを非同期に保ちながらも問題ありません。 –

答えて

4

ミドルウェアを非同期にして、必要に応じてnext()メソッドを呼び出す限り、問題はないはずです。 Expressは、サーバー・インスタンスが構成されている場合、かなりの負荷を処理できます。

実際の問題は、同期メソッドを開始するときです。これは、解像度を適切に処理するための約束を利用することができます。

PROTIP:ミドルウェア/コントローラロジックでできるだけネストされた約束の解像度を避けてください。 Bluebirdの.all()メソッドを利用すると、ブロッキングリクエストの処理時間を浪費することはなく、シーケンシャルコールバックを発行する必要がある場合は、非同期の滝や非同期シリーズ(あなたの約束ライブラリに応じて)を検討してください。彼らが事前の情報に依存している場合は決議を約束する。コードをきれいに保つのに役立ちます。