[解決済み】Node.jsとCPUに負荷のかかるリクエスト
質問
Node.jsのHTTPサーバーをいじり始め、サーバーサイドのJavascriptを書くのがとても好きなのですが、何かが私のウェブアプリケーションにNode.jsを使い始めることを妨げています。
非同期I/Oのコンセプトは理解していますが、画像操作や大きなデータセットのソートなど、手続き型コードが非常にCPUに負担をかけるエッジケースについて、やや懸念しているのです。
私が理解しているように、ユーザーのリストを見たり、ブログの記事を見たりするような単純なWebページのリクエストでは、サーバーは非常に高速になります。しかし、グラフィックを生成したり、何千もの画像のサイズを変更するような非常にCPU集約的なコード(例えば管理者のバックエンド)を書きたい場合、リクエストは非常に遅くなります(数秒)。このコードは非同期ではないので、この数秒の間にサーバーに来るすべてのリクエストは、私の遅いリクエストが完了するまでブロックされることになります。
一つの提案は、CPUに負荷のかかるタスクにWeb Workersを使うことでした。しかし、ウェブ ワーカーは別の JS ファイルを含んで動作するので、きれいなコードを書くのが難しくなるのではないかと心配です。CPUに負荷のかかるコードがオブジェクトのメソッドにある場合はどうでしょうか?CPUに負荷のかかるメソッドごとにJSファイルを書くのは、ちょっと嫌ですね。
また、子プロセスを生成するという案もありましたが、そうするとさらにコードのメンテナンス性が悪くなります。
この(と思われる)障害を克服するために何か提案はありますか?CPUの重いタスクが非同期で実行されるようにしながら、Node.jsできれいなオブジェクト指向のコードを書くにはどうしたらいいでしょうか?
解決方法は?
必要なのは、タスクキューです 長時間実行するタスクをウェブサーバの外に出すことは良いことです。各タスクを別々のjsファイルに保存しておくことは、モジュール化とコードの再利用を促進します。これにより、長期的にデバッグや保守が容易になるような方法でプログラムを構成する方法を考えざるを得なくなります。タスクキューのもう一つの利点は、ワーカーを別の言語で書くことができることです。タスクをポップし、作業を行い、レスポンスを書き戻すだけです。
こんな感じ https://github.com/resque/resque
なぜそれを作ったのか、githubの記事です。 http://github.com/blog/542-introducing-resque
関連
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】Node.jsはなぜシングルスレッドなのですか?[クローズド]