2017-05-02 14 views
1

私は単純なソートアルゴリズムのデモアプリケーションに取り組んでいます。私は、JavaScriptで書かれたいくつかのソートアルゴリズムと、それらを試してみるためのHTMLページを持っています。私は別々にアルゴリズムをテストし、うまく動作します。WebworkerにもかかわらずUI要素がフリーズ

独自の配列を入力することも、ランダムに生成することもできます。配列のサイズが大きすぎる場合、それを生成していようとソートしているにせよ、これはUIをハングするので、これらの操作を別のスレッドで実行するWebワーカーを追加しました。

アプリは何をしているのかを記録します。 Webワーカーの前に、本当に大きな配列を扱うときは、プロセスが完了した後に突然ログが表示されますが、Webワーカーのおかげで個々のステップが完了するとすぐにログが表示されます。また、ページはスクロール可能なままですが、ワーカーがなければ、ジョブが完了するまですべてがフリーズします。

計算上の重い要素をWebワーカーに委譲したので、私はページ上の要素が完全にインタラクティブになることを期待していましたが、これは当てはまりません。とにかく、ページのすべてのボタンなどが反応しなくなります。正確に言えば、それらは非常に短い間インタラクティブに滞在してからフリーズします。たとえば、マウスオーバーボタンをクリックすると、カーソルの形が変わりますが、どこに移動してもその形に固定されますクリックすると、ウェブワーカーが仕事を終えるまでクリックは登録されません。これは問題です。なぜなら、配列を生成したり並べ替えたりするのに時間がかかりすぎると、ユーザーがクリックしてWebワーカーを停止させるための「停止」ボタンがあるからです。物事が起きると、停止ボタンがフリーズし、クリックすると、作業者がやり終わった後で効果があり、無駄になります。

ページ上の自分のコントロールが使用可能であることを確認するにはどうすればよいですか?ありがとう!

答えて

0

私は同じ問題だと思っていたので、数日間それを持っていました。ありがたいことに、私はこれを横切って実行しました:https://nolanlawson.com/2016/02/29/high-performance-web-worker-messages/

何らかの理由で、Webワーカーがメッセージを投稿するときに何らかの理由でChromeとFirefoxの両方で表示されますが、データのパッキング中にメインスレッドがフリーズします。

メッセージを投稿するときにJSONを使用してすべてのオブジェクトを完全にシリアル化すると、すべての作業がはるかに円滑になります。

関連する問題