問題タブ [web-worker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
664 参照

javascript - Javascript での重い計算

私は現在、Javascript(ブラウザとノード)用の金融ライブラリを構築中です

ライブラリの主な機能の 1 つは、オプションを使用してシミュレーションを行うことです。そのため、シミュレーションの生成には多くの計算が必要になります。

私は現在、HTML5 webworkers(node-webworker) を使用し、特定の数の webworker に計算を分散する AsyncManager と呼ばれる、私が作成したライブラリを使用しています。私がこれを行っている方法は、関数を含む JavaScript 計算オブジェクト (Calc オブジェクトは calculate(args) と呼ばれる 1 つのメソッドを実装する必要があります) をシリアル化することです。

(関数を文字列形式に変更して関数のシリアル化を行い、Webworker でそれらを評価して関数に戻します。)

事前に計算を知らなくても、webworkers を使用して JavaScript で負荷を分散するより良い方法を誰かが考えたのではないかと思っていました。

0 投票する
3 に答える
15056 参照

javascript - スクリプトがWebワーカーで実行されているかどうかを確実に検出します

私は現在、JavaScriptで小さなライブラリを作成して、Webワーカーに重い計算を委任できるようにしています。

いくつかの理由で(主にUIスレッドでデバッグしてから、ワーカーで同じコードを実行する機能のために)、スクリプトが現在ワーカーで実行されているのか、UIスレッドで実行されているのかを検出したいと思います。

私は経験豊富なJavaScript開発者ではないので、次の関数が私がワーカーにいるかどうかを確実に検出できるようにしたいと思います。

それで、それはありますか?

0 投票する
1 に答える
543 参照

javascript - UIの相互作用を妨げないJavaScriptのバックグラウンドタスク

私はJavaScriptで実装されたモバイルアプリに取り組んでいます。これは、主にサーバーから(JSONPを介して)データをフェッチし、ローカルストレージを使用してデータベースに書き込むなど、多くのバックグラウンド処理を実行する必要があります。フォアグラウンドでは、ユーザーはローカルに保存されたデータをナビゲートする可能性があるため、スムーズに反応するアプリが必要です。

この相互作用(JSONPを介してサーバーからデータをフェッチし、それを使ってマイナーな作業を行った後、ローカルデータベースに保存する)は非同期で行われますが、JSONPに必要なDOM操作とデータベースの相互作用のため、これを行うことはできませんWebWorkers。したがって、多くの「バックグラウンド処理要求」でJavaScriptイベントキューをブロックするという問題が発生し、アプリの反応が非常に遅くなります(または完全にロックされます)。

これが私が背景をやっている方法の小さなスケッチです:

JavaScriptのイベント処理メカニズム(つまり、タイマーの操作に関するJohn Resigsの説明)についてはすでに読んでいましたが、本当にやりたいことは次のとおりです。イベントキューに何かすることがあるかどうかを確認します。その場合は、100ミリ秒待ってから、もう一度確認してください。現在キューで待機しているものがない場合は、少量のデータを処理して再度確認してください。

私が読んだ限りでは、JavaScriptはイベントキューに直接アクセスできないため、これは不可能です。

では、UIイベントに干渉しないようにコードを最適化して、ユーザーがアプリをスムーズに操作できるようにするための設計上のアイデアはありますか?

0 投票する
4 に答える
24300 参照

javascript - ネイティブ キャンバス関数を使用して描画するための Web ワーカーの使用

CanvasPixelArray取得した viaをワーカー スクリプトに送信getImageDataし、ワーカー スクリプトがバックグラウンド スレッドでピクセルを操作できるようにし、最終的に操作されたピクセル配列を送り返すことができます。

ただし、ネイティブのキャンバス描画関数を使用していますdrawImagedrawImage呼び出しは現在 UI スレッドをブロックしています。これにより、ボタンの再描画が遅くなり、ボタンをクリックしたときに顕著な遅延が発生します。いくつかの欠点を挙げると. ctx.imageSmoothingEnabled = false(編集:少なくともwebkitプレフィックス付きの WebKit では、小さな改善が実現できるようになりました。)

Web ワーカーを使用して、描画をメイン スレッドからバックグラウンド スレッドに移動したいと考えています。ただし、キャンバスもコンテキストもワーカーに送信できないようです。

私はMDN でこの通知を見つけました:

注: いつものように、ワーカーを含むバックグラウンド スレッドは DOM を操作できません。バックグラウンド スレッドによって実行されるアクションによって DOM が変更される必要がある場合は、作成者にメッセージをポストしてその作業を行う必要があります。

しかし、DOM はそのままにしておきたいと思います。キャンバス要素に物を描きたいだけです。これは可能ですか、それとも Web ワーカーは実際に計算のみが許可され、描画は許可されていませんか?

(または、キャンバスに描画drawImageする代わりに、を操作するような関数を使用することはおそらく可能ですか?)CanvasPixelArray

0 投票する
2 に答える
1380 参照

javascript - web worker が firefox 8 で動作せず、firefox 7 で動作する

arbor.js ( beautified )というライブラリを使用しています。次のコード行が含まれています。

この時点でエラーがスローされ、次のメッセージが Firebug で報告されます。

「ドメインを取得できませんでした!」

このエラーが発生する行は 258 です。arbor_path()その行の関数は を返す"js/"ため、実質的に呼び出される関数は ですi = new Worker("js/arbor.js")

これは Firefox 7 で完全に機能していました。解決方法を知っている人はいますか、それとも何が問題なのですか?

0 投票する
2 に答える
379 参照

android - モバイルブラウザのウェブワーカーとオフラインストレージのサポート

モバイルブラウザ(Android、iOS)はWebworkerとオフラインストレージをサポートしていますか?

デスクトップブラウザ(サイズ、リソースなど)と比較した場合、制限はありますか?

0 投票する
2 に答える
3716 参照

javascript - JavaScript: このタイマーは信頼できますか?

今日、私は JavaScript での Web ワーカーの世界を紹介されました。これは私にタイマーについて再考させました。私はタイマーをこのように醜い方法でプログラムしていました。

タイマーを開始するときに日付を保存することでこれを改善できることは知っていますが、私はそれが好きではありませんでした.

ここで、Web Workers を使用する方法を思いつきました。少しベンチマークを行ったところ、はるかに信頼性が高いことがわかりました。私は JavaScript の専門家ではないので、この関数が正しく機能するかどうか、またはどのような問題が発生する可能性があるかを事前に知りたいと思います。

私の JavaScript コード (JQuery を使用していることに注意してください):

外部スクリプト ('scripts/task.js'):

私のウェブサイトでライブデモを見ることもできます。

0 投票する
3 に答える
4884 参照

javascript - JavaScriptWebワーカーを使用した並列プログラミング/同期

バリアセマフォロックモニターなどの同期プリミティブはJavaScript / Web Workersで利用できますか、それともそのようなものを利用できるようにするライブラリがありますか(java.util.concurrentのようなものを考えています) Javaで)?

ワーカーには、スレッドと区別するためのあいまいなプロパティがありますか(たとえば、メインスレッドとメモリを共有できますか)?スポーンできるワーカーの数に何らかの制限がありますか(セキュリティ上の理由などで...)?私は何か特別な注意を払う必要がありますか?

0 投票する
1 に答える
1237 参照

javascript - 労働者間のコミュニケーションを行う方法は?

私はWebワーカーを実験していて、彼らが恥ずかしいほど並行した問題にどれだけうまく対処できるのか疑問に思っていました。したがって、私はコナウェイのライフゲームを実装しました。(ぼかしなどを行うよりも少し楽しくすること。ただし、その場合も問題は同じです。)

現在、1人のWebワーカーが反復を実行し、UIスレッドの新しいImageDataをポストバックしてキャンバスに配置しています。うまく動作します。

しかし、私の実験はそれだけではありません。いくつかのCPUが利用可能であり、アプリケーションを並列化したいと考えているからです。

したがって、最初に、データを2つに分割し、中央を下にして、2人のワーカーがそれぞれ半分を処理するようにします。もちろん問題は分割です。ワーカーAにはワーカーBからの1列のピクセルが必要であり、その逆も同様です。これで、UIスレッドにその列をワーカーに渡させることでこれを明確に修正できますが、スレッドがそれらを直接相互に渡すことができれば、はるかに優れています。

さらに分割すると、各ワーカーは隣接するワーカーを追跡するだけで済み、UIスレッドはUIの更新のみを担当します(そうあるべきです)。

私の問題は、この労働者間のコミュニケーションをどのように達成できるかわからないことです。初期化postMessageを使用してネイバーを相互に渡そうとしましたが、参照を渡すのではなく、ワーカーをコピーすることになり、幸いなことにchromeが不可能であると警告しました。

最後に、と呼ばれるものがあることがわかりますSharedWorker。これは私が調べるべきものですか、それともWorker私の問題を解決するためにそれを使用する方法はありますか?

0 投票する
0 に答える
695 参照

javascript - JavaScriptでタイマーとボタンの同時押し

私の Web アプリでは、ユーザーにカウントダウン タイマーが表示され (1 秒ごとに残りの分数と秒数が更新されます)、「+1」ボタンと「-1」ボタンを押して合計値を増やすことができます。(ユースケースは、ユーザーが指定された分数で見ることができる人の数を数えています。)

を使用していますが、実行スレッドが 1 つしかないというsetInterval問題が発生しています。ユーザーが +1 ボタンと -1 ボタンを押すと、タイマーが中断され、ディスプレイがオフになります。

デスクトップでは、おそらくタイマー表示用の別の Flash ムービーが解決策になります。私たちのユーザーは iPad で Web アプリも使用しているため、Flash はオプションではありません。他の提案はありますか?PhoneGap ラッパーは複数のスレッドを許可できますか?

またはWebWorkersはどうですか?問題は、ワーカー スレッドが DOM にアクセスしてタイマー表示を編集できなかったことだと思います。