1

カスタム分析バックエンドを実装した NodeJS Express アプリケーションがあります。現在、多機能携帯電話などの JS が無効なブラウザー向けに、トラッキング メカニズムを実装する方法を決定しています。

私たちが検討している設計アプローチの 1 つは、すべてのリクエストをインターセプトし、リクエスト/コンテキストからパラメータを抽出してバックエンドに送信するミドルウェアを作成することです。これは非常にスケーラブルであり、私たちのようなカスタム分析ソリューションにとって完全に理にかなっています.

もう 1 つのアプローチは、Google アナリティクスのようにトラッキング ピクセルを作成し、そこからデータを抽出することです。しかし、GA とは異なり、パラメータとデータ構造がいつでも変更またはスケールアップされる可能性があるため、カスタム トラッキング ソリューションのスケーラブルなソリューションとは思えません。

私の質問はこれです-非同期リクエストを行うミドルウェアを作成することの裏返しはありますか? サーバーへのすべてのリクエストがこのミドルウェアを通過するため、作成中に注意する必要があることはありますか? 私たちのアプリはかなり大規模なアプリで、毎分数十万のトラフィックがあります。

4

1 に答える 1

5

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

本当の問題は、解決を適切に処理するためにプロミスを利用できる/すべきである同期メソッドを開始するときです。

PROTIP: ミドルウェア/コントローラー ロジックでネストされた promise 解決をできるだけ避けてください。Bluebird の.all()メソッドのようなものを利用して、リクエストのブロックで処理時間を無駄にしないようにします。また、順次コールバックを発行する必要がある場合は、(選択した Promise ライブラリに応じて) 非同期ウォーターフォールまたは非同期シリーズを検討してください。これにより、Promise を順次実行できます。解決策が事前情報に依存している場合。コードをきれいに保つのに役立ちます。

于 2016-09-20T21:06:12.433 に答える