2

CPU を集中的に使用する JavaScript アプリケーションを作成しています。CPU を集中的に使用する計算が発生しているときに UI がロックされることがあるという問題が発生しています。これを解決するための標準的なアプローチは、UI イベントを呼び出しsetTimeoutてイベント ループに応答させることです。しかし、それは私にはうまくいきません。その理由は次のとおりです。

ページが読み込まれると、javascript vm は大量のデータの解析と分析を行う必要があります。これは本当にバックグラウンド的なもので、setTimeout各チャンクを実行するために呼び出しています。ただし、これは、すべてのチャンクが完了するまで (大きなファイルの場合は最大 10 秒かかる場合があります)、保存するたびに、非常に途切れ途切れの UI エクスペリエンスがユーザーに表示されることを意味します。これは受け入れられません。

私は2つの解決策を考えることができますが、どちらもあまり好きではありません:

  1. チャンクをより細かくすることで、イベント ループが実行される機会が増えます。しかし、CPU コードがすでに非常に複雑であるため、私はこれが好きではありませんが、通常はうまく動作します。CPUバウンドコード全体で呼び出すsetTimeoutと、はるかに複雑になります
  2. サーバーでより多くの作業を行います。ただし、ノードサーバーを実行していると、クライアントからサーバーに問題が単純にプッシュされ、帯域幅が増加するという問題が追加されます。

これを修正することは、従来のスレッドベースの VM では簡単です。Javascript はどうすればいいですか?


アップデート:

私が言及するのを忘れたいくつかのポイント:

  • 従来のブラウザーには関心がなく、すべてのユーザーは最新の Firefox、Chrome、Opera、Safari、IE などを使用する必要があります。
  • 最初のプロトタイプでは、クライアントとサーバーが同じ場所に配置されていますが、リモート サーバーへの移行を妨げるものは何もないはずです。
  • データはクライアント上に存在します (クライアントとサーバーが同じマシンである場合は当然ですが、これはリモート サーバーに移動した場合でも当てはまります)。

Webworker は解決策かもしれませんが、それでも不安定に見えます。誰もそれらを経験したことがありますか?それらは安定していますか?それらを十分にサポートしていない最新のブラウザーはどれですか? それらに一般的な問題はありますか?

4

1 に答える 1

5

このアプリケーションが公開されるかどうかに応じて、Web ワーカーを使用できるか、データをさらに分割するか、サーバー側の処理を実行できるかを決定する必要があります。実際のアプリケーションの場合、ユーザーが最新のプロセッサを持っているとは期待できないため、実際の解決策はサーバーで大量の計算を行うことです。おそらく数回咳をしてクラッシュするだけの単なるネットブックである可能性があります。

Web ワーカーは、ユーザーがそれをサポートする最新のブラウザーを持っていることが確実な場合は解決策になりますが、そうでない場合は、ほとんどの HTML5 のようにそれをシムする方法はありません。

あなたのアプリケーションについて私が知っていることに基づいて、事前に計算されたデータをクライアントに送信する必要があると思います。さらに、Node.js はハードコアな計算を行うのが苦手なので、サーバー上でさまざまなデータ処理オプションを調べたいと思うかもしれません。また、とにかくクライアントに初期データを提供する必要があるため、帯域幅が問題になるとは思いません。処理されたデータはどのくらい大きくなりますか?

于 2012-06-07T21:25:06.687 に答える