2012-01-05 3 views
0

私はWeb開発に新しく、フォームからユーザー入力を受け取り、そこからグラフを作成し、グラフ化アルゴリズムを実行するコードを書きました。Web開発:グラフの作成とアルゴリズムの実行

最初は投稿リクエストを使用してテキストを送信しましたが、エッジが多すぎるとアルゴリズムが時間がかかりすぎてタイムアウトエラーが発生することがありました。私のコードは非効率的ではないので、私はかなり確信しています。

これを修正するには、リクエストを送信する代わりにjavascriptを使用する必要があると思います。これは通常、多くの時間を必要とする機能で行われますか?

私の主な質問は:私はjavascriptでコードを書き直す必要がありますか、またはjavascriptから私の元の関数を呼び出す方法はありますか?

私はあなたがClojureの中に自分のJavascriptをプログラミングすることができ...

+1

そのようなことを読んだら、あなたの質問は次のようになります。JavaScriptでクロージャーコードを呼び出すにはどうすればいいですか? – epascarello

+0

私はJavascriptが遅すぎるとは思わない。あなたの機能は何をすべきでしょうか? O表記で表現できますか? (http://en.wikipedia.org/wiki/Big_O_notation) – Art

+0

espascarello:JavaScriptが役立つかどうかはわかりませんでした。私はまだ一般的なWebプログラミングについては非常に不確かなので、この特定のケースでは他のオプションがあるかどうかを知りたいと思っていました。 – markl

答えて

2

をClojureのを使用しています。

clojurescript

+0

私はこれを試すかもしれません。私は、JavaライブラリJGraphTを使用しました - clojurescriptがjavascriptにコンパイルされている場合、これは私がそれを変更する必要があることを意味しますか? – markl

+0

はい、クライアント側でJavaライブラリを使用する場合は、アプレットになければなりません。 – user615457

2

それはあなたがそれがバックグラウンドで処理し、その後、彼らは準備ができている時に結果を取得している、リクエストを送信するためにいくつかの方法が必要になり、よりように聞こえる - すべて別々のWebリクエストとして。

HTTP要求にはタイムアウトがあり、ネットワーク内の何らかのものが失敗する可能性が高いほど、タイムアウトが長くなります。

ほとんどのバックエンド言語は、それを達成するための方法を提供しています。 Clojureは、スレッド、エージェント、およびこれに似たツールで優れています。クライアントとサーバーとのやりとりを再構築するので、これについてもう一度心配する必要はありません。

1

私が興味があるのは、このアルゴリズムを実行しているグラフの大きさです。数千(または何百万)の頂点とエッジを持つ何かをやっていますか?またはこれは単に非常に高価なアルゴリズムですか?

アルゴリズムがどれほどうまくコーディングされていても、これらの要求を処理するのは自然に長い時間がかかるとしましょう。 javascriptに行くことは、厳密に唯一の解決策ではありませんが、あなたにとって最良の方法かもしれません。

オプション:

  1. は、クライアントマシン上で、JavaScriptでは、アルゴリズムを実行します。ここでは、ユーザーがフォーム上のデータを入力すると、アルゴリズムはクライアントマシン上のjavascriptで実行されます。あなたのサーバーはもはや関与していません。あなたのリソースが縛られていないので、いいです。

  2. サーバーのタイムアウト時間を長くします。人々はあなたのサーバーにもっと課税することになるので、20秒以上には推奨されません。

  3. サーバー上でアルゴリズムを実行します。 Daniel Pittmanが提案した方法を使用して、タイムアウトの問題を回避してください。ユーザーが要求を要求IDに戻して接続を閉じるとき。アルゴリズムの実行が完了したら、将来的にサーバー要求を行うためにJavaScriptタイムアウトを設定します。終了すると、サーバーは結果を返し、これがレンダリングされます。そうでない場合は、タイマーを再起動します。

これは本当にあなたのサーバーまたはクライアントのマシンを動作させるかどうかになります。もしあなたがclojurescriptを使ってあなたのjavascriptを作成する道を行くのでなければ、後者はjavascriptになります。私はまだ生産コードのためにそれをしませんが、あなたはそれで遊ぶことができます。

最後に、何をするにしても、ページに作業が完了していることを示すウィジェットがあることを確認してください。さもなければ、彼らはちょうど欲求不満になり、サーバーにもう一度当たる(または離れる)ことになります。

関連する問題