従来、サーバー上で行われていた処理を、node.js Webアプリケーションのクライアントではなく処理するという実際の影響について、いくつか意見を述べたいと思います。node.jsサーバーのJavaScript処理をクライアントに移動する
例のケーススタディ: ユーザーは自分の銀行取引明細書の項目の価値は年を含むCSVファイルをアップロードします。ファイルを解析し、各エントリを分類し、各カテゴリの累積値を計算して、新たに分類された文をdbに格納し、ユーザに支出分析を表示できるようにします。
エントリは、説明の一致する文字列によって分類されます。多くのカテゴリと多くのエントリがあり、処理にかなりの時間がかかります。
私たちのnode.jsサーバーでは、ネットワークの応答などを待っている間にイベントループを自由に解放することができますが、データの破損などの処理があると、サーバーは要求への応答をブロックされます。これは避けられないようです。
伝統的に、CSVファイルはサーバーに渡され、サーバーは処理し、dbで保存し、処理の出力を戻します。
この処理は、ブラウザによって処理され、出力が表示され、保存されるようにサーバーに送信され、当社のシングルスレッドのNode.jsサーバに意味をなすようです。もちろん、これが完了している間、クライアントは待機する必要がありますが、その処理によってサーバーが他のクライアントからの要求に応答することが妨げられることはありません。
誰かがこのモデルを使用してアプリケーションを構築した経験があるかどうかを調べることに興味があります。
だから、質問は..です処理するために、サーバーではなく、ブラウザを得ることに何か問題があり、可能な限り、イベントループを遮断する任意の処理?これはnode.jsアプリケーション開発のための良い/分かりやすい/実行可能なアプローチですか?
1年分の銀行口座情報は、処理、クライアントまたはサーバーに2ミリ秒以上かかることはありません。 – Pointy
['process.nextTick()'](http://nodejs.org/docs/latest/api/process.html#process.nextTick)を使用してサーバー側の処理を分割することができますので、他の処理に反応します処理中のリクエスト - 数行を処理し、残りの作業を次のチックに委譲します。 –
カテゴリがたくさんある場合は、それぞれが数百の可能性のある一致を持ち、各エントリはそれぞれに対してテストする必要があります。とにかく、ポイントではありません。悪い例であろうとなかろうと、問題は処理するクライアントに大量の処理操作を与えるという一般的なアプローチのほうがあります。 @JoeWhiteあなたの助言に感謝します.. nextTick()を見てください – hacklikecrack