JavaScript、HTML5、AngularJSを使用してアプリケーションを作成しています。かなり最近のブラウザ(IE10ではなく、IE9ではない)で動作するだけです。AngularJSアプリケーションで計算集約型タスクを実行する方法は?
アプリケーションのいくつかの場所では、XML解析、ベース64デコードなどのコンピューティング集中型のタスクがあります。これらはかなり大きなデータを含む可能性があります(数MBは確かに可能性があります)。
ちょうどatob()
またはDOMParser.parseFromString()
のようなものを呼び出すと、数秒間または数分も応答しないブラウザが表示されます。これは明らかにユーザーにとって容認できません。
私はAngular's Q Serviceを使用して外部Webサービスに非同期でアクセスするようにしました。したがって、応答を待っている間にブラウザをハングアップしないようにしました。しかし、このような操作にはすでに非同期APIがあります。
独自の非同期APIを持たないこれらの計算目的のタスクはどうなりますか?
私はこれらのタスクのいくつかを分割して、連鎖約束をすることができます。これはまったく役に立ちますか?ブラウザメッセージキューは各タスクの終わりに回転しますか?
適切なマルチスレッドを提供するように見える「Webワーカー」の存在がわかります。しかし、彼らはワーカースレッドとの間でオブジェクトをやりとりする能力があまりないようです。確かに、私のような誰かがC#.Netから来ているようです。例えば、スレッド上のタスクにAngularサービス(ビルトインと私自身)を注入したいと思います。私はスレッド間で大量のデータをコピーしたくありません。
深刻な計算を含む、応答性の高いクライアントサイドのWebアプリケーションを他の人が達成していますか?もしそうなら、彼らはこれを達成するために何を使用していますか?
サービスをインジェクトする場合、ワーカースレッドはグローバル関数importScripts( 'script.js')を使用できます。悲しいことに、データをコピーするという問題に対する解決策はありません。 –
私は実験してきましたが、Angular自体をワーカーに読み込ませることはできません(ウィンドウと文書が必要です)、Angularを使うことはできないと思いますか? – PeteAC