2016-09-23 13 views
0

私は、depthオプションパラメータが渡されたことに応じて、より多くのリンクをダウンロードするためにit-selfを再帰的に呼び出すクローラモジュールを作成しています。最高のパフォーマンスを得るためのNode.js最適化モジュール

さらに、私がダウンロードした返されたリソース(クローラに渡された設定に応じて充実/変更)に関する多くのタスクを実行しています。
このプロセスは、実行されるまで再帰的に進行しています。使用される構成によっては、時間がかかる(または実行されない)ことがあります。

できるだけ早く最適化し、それを使用するNode.jsアプリケーションを妨げないようにします。
私は、そのルートの1つがユーザ定義の(クエリ文字列)ホストのクローラを起動する高速サーバをセットアップしました。
さまざまなホストに対していくつかのクロールセッションを開始した後、私はときどきシンプルテキストだけを返す他のルートから本当に遅い応答を得ることができることに気付きました。
遅延は数ミリ秒から30秒のようなものまでどこでもかまいません。無作為な時間に起こっているようです(無作為ではありませんが、原因を特定できません)。
Webstormと統合されたV8プロファイラ機能を使用してCPUプロファイリングについてJetbrainsのarticleを読んだことがありますが、残念ながら情報の収集方法と表示方法のみを示していますが、どのようにそのような問題を見つけるために、私はかなりここにこだわっています。

誰でも、私のクローラが行う可能性のあるエクスプレスサーバ(再帰呼び出しが多い)を妨げる可能性のあるヒントや、私が探しているホットスポットを見つける方法を教えてください。それらを最適化する?

答えて

0

表示されていないコードを最適化する方法を具体的に説明するのは難しいですが、説明されている状況に関連するアドバイスがあります。

ブロッキングコードを実行している可能性があります。 setTimeoutまたはprocess.nextTickを使用せずに深い再帰を使用しないでください。これを中断してイベントループをしばらく実行する機会を与えないでください。

+0

誰かが言っていると思っていましたが、この質問は本当に自分のコードに固有であり、この質問に遭遇する可能性のある他の人を助けることができませんでした。私がどこでこのような質問をして、コードを提供するのがより具体的であるか分かっていれば、それは素晴らしいことですが、stackoverflowでは実用的ではありません。それは単なる1つまたは2つのファイルモジュールではないからです。ここにコードを見て、何が間違っているか教えてください。 – Jorayen

+0

また、イベントループを実行する機会を与えるためにタイマーを使うべきだと思っていましたが、私が理解できないことは、タイマーの中でそれらを囲むためにどのようなコードをターゲットにするかということです。 – Jorayen

+0

@ Jorayen this [existing stackoverflow question](http://stackoverflow.com/questions/25568613/node-js-event-loop)は、1つまたは2つの質問に答えるかもしれません。 – Gimby

関連する問題