2012-03-18 2 views
0

私は、Nonogramsを入力、編集、解決できるJavaScriptベースのウェブサイトを作成しました。ご存知のように、ノングラムを解くことはNP完全な問題です。ウェブサイトで大量の計算を処理する方法は? WebワーカーまたはCGI?

私の最初の試みは純粋な(シングルスレッド)JavaScriptでした。しかし、より大きなノングラムでは、ChromeはBSODを表示し、数分後にJSスクリプトを強制終了しました。次の試みはWeb Workersを使用することでした。私は解決アルゴリズムを分割して、各作業者が解決する行/列を1つずつ取得し、結果を返します。これは改善であり、中規模のノングラムを解くことができました。しかし、時にはブラウザーがJSのVMを殺したこともあります。これにはしばらくしてBSODが表示され、Webワーカーが作ったものなので期待していたほど実際には反応しませんでしたか?

"fun"のために、私は解決アルゴリズムをPythonに移植し、Webワーカーの代わりにpythonスクリプトを呼び出すajax要求を使用しました。興味深いことに、それはJavaScriptよりも遅かったですが、しばらくしてから、要求は500内部サーバーエラーを返しました。私はこれがPHP afaikの30秒であるCGIスクリプトの最大実行時間に起因すると考えています。

複数のユーザーがノングラムを解きたい場合、サーバーは100%CPUで動作するため、おそらくクライアント側の計算に固執するからです。

このような計算を行うにはどのような方法が良いですか(これは大きなノングラムでは10分かかるかもしれません)。 Webサイトが応答を維持し、ブラウザが実行タスクを強制終了しない限り、実行時間は問題ではないと私は思う。一方

、私はまた、再帰アルゴリズム....

感謝を最適化しようとしています!

答えて

0

WebWorkersにメッセージを送信する前に、少し時間がかかることがあります。プロセスが十分に小さい機能に分割されている場合は、ページの応答性を維持することは可能ですが、解決に時間がかかります。

+0

私は既にしました。私はブラウザが現在解決していることを示すgifを使用しています。私はjQueryのshow/hideを使っていました。しかし、私はすぐに労働者を開始するときに表示されませんでした。そこで私は2秒の遅れを導入しました。しかし、作業者が計算を開始し、クロムプロセスが100%CPUで実行されるとすぐに、Webサイトは応答しなくなります。 – jaw

+0

@ebebそして、あなたはそれのそばに絶えず走っているものはないと確信していますか?より明確な答えが得られる前に、いくつかのコードを見る必要があるでしょう。 –

+0

ええ、確かに、私は、作業者のpostMessage呼び出しをajax呼び出しで置き換えて、Pythonバージョンを使用するとすぐにページが応答するためです。私は問題を説明する簡単な例を集めようとします。 – jaw

関連する問題