問題タブ [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.
javascript - 「キャッチされないエラー:DATA_CLONE_ERR:DOM例外25」がWebワーカーによってスローされました
だから私はWebワーカーを作成しています:
画像は次のとおりです。
私の問題はこれと関係があると思います:
http://dev.w3.org/html5/spec/Overview.html#safe-passing-of-structured-data
どうすればこれを回避できますか?ご覧のとおり、ホストオブジェクトを実際の配列にスライスしようとしましたが、うまくいきませんでした。
これが私がハッキングしているファイルへのリンクです:
https://github.com/jtmkrueger/JAIL
アップデート - - - - - - - - - - - - - - - - - - - - - - - - - -
これは、@davinから受け入れられた回答に基づいて私がしなければならなかったことです。
注:互換性を確保するためにunderscore.jsを使用しました。
javascript - JavaScriptがWebWorkerとして実行されているかどうかを検出するための標準的なメカニズムはありますか?
WebWorkerは、従来のJavaScriptの「ウィンドウ」コンテキストとは完全に別のスコープで実行されます。スクリプト自体がWebWorkerとして実行されているかどうかを判断するための標準的な方法はありますか?
私が考えることができる最初の「ハック」は、ワーカーのスコープに「ウィンドウ」プロパティがあるかどうかを検出することです。存在しない場合、これはWebWorkerとして実行していることを意味している可能性があります。
追加のオプションは、標準の「ウィンドウ」コンテキストに存在しないプロパティを検出することです。Chrome 14の場合、このリストには現在次のものが含まれています。
WorkerLocationの検出は実行可能な候補のように見えますが、それでも少しハックな感じがします。もっと良い方法はありますか?
編集:これは、実行中のWebWorkerに存在し、現在「ウィンドウ」にあるプロパティを判別するために使用したJSFiddleです。
javascript - バージョン 2.2 以降の Android ブラウザーから HTML5 Web Workers のサポートが削除されたのはなぜですか?
JavaScript スレッドについて何かを学ぼうとしています。そして、チュートリアルから、HTML5 API Web ワーカーについて学びました。この API は、JavaScript マルチスレッドを有効にします。そこで、この機能をどこでどのように使用できるかを考え始めました。
フォームhttp://caniuse.com/#search=worker
この API は、下位バージョンの Android ブラウザーでのみサポートされていることがわかりました。Android 2.2 以降では使用できません。
この結果は正しいですか?もしそうなら、それはパフォーマンスの考慮のためですか?
この API はどのバージョンで利用できますか?
javascript - JavaScriptマルチスレッド
私はJavaScriptで(本物または偽の)マルチスレッドを実装するいくつかの異なる方法の比較に取り組んでいます。私の知る限り、実際のスレッドを提供できるのはWebworkersとGoogle Gears WorkerPoolだけです(つまり、実際の並列実行で複数のプロセッサに分散します)。私は次の方法を見つけました:
を使用してタスクを切り替える
yield()
setInterval()
スレッドが互いに待機している状態で(または他の非ブロッキング機能)を使用するGoogle Gears WorkerPoolスレッドを使用する(プラグイン付き)
html5Webワーカーを使用する
関連する質問を読んで、上記の方法のいくつかのバリエーションを見つけましたが、それらの質問のほとんどは古いので、いくつかの新しいアイデアがあるかもしれません。
私は疑問に思っています-JavaScriptでマルチスレッドを他にどのように達成できますか?他の重要な方法はありますか?
更新:コメントで指摘されているように、私が本当に意味したのは並行性でした。
更新2: Silverlight + JScriptがマルチスレッドをサポートしているという情報を見つけましたが、これを確認できません。
更新3: Googleが非推奨のGears:http ://code.google.com/apis/gears/api_workerpool.html
javascript - Webワーカーへのオブジェクトの受け渡し
postMessage関数を介してオブジェクトをWebワーカーに渡そうとしています。
このオブジェクトは、キャンバスやその他の物に自分自身を描くためのいくつかの機能を備えた正方形です。Webワーカーは、このオブジェクトの配列を返す必要があります。
問題は、このオブジェクトを使用してpostMessage関数を呼び出すと、次のエラーが発生することです。
これは、オブジェクトをワーカーに送信することと、その逆の両方で取得します。
エラーは、JavaScriptがオブジェクトをシリアル化する必要があるためだと思いますが、オブジェクトには関数が組み込まれているため、シリアル化できません。
誰かが同じような問題を抱えたことはありますか?これに対する回避策を知っていますか?
前もって感謝します。
javascript - ブラウザをロックせずに、ビッグデータJSONをRESTリクエストからオブジェクトに逆シリアル化しますか?
リッチインターネットアプリの場合:
- ユーザーがリソースをリクエストする
- サーバーは巨大なJSON応答で応答します
- クライアント(ブラウザーで実行)は、JSONを処理して、アプリケーションの状態を構成する多くのオブジェクトに変換する必要があります。
手順3は集中的であり、ブラウザがロックする可能性があります。私はWebワーカーの使用を考えていましたが、Webワーカーはそのタスクに適していない可能性があると思います。
私がワーカーを理解しているように、ワーカーはメッセージを純粋にテキストまたはJSONとして渡します。したがって、Webワーカーがメッセージを受け入れることは可能ですが(「このURLでリソースをフェッチしてください」)、ワーカーは大きなJSON応答を取得し、アプリの状態を構成する多くのオブジェクトに逆シリアル化することもできますが、メッセージパッシングコンストラクトを介してオブジェクト(さまざまなクラスのインスタンス)をメインプロセスに戻す方法はありません。右?それとも私は何かが足りないのですか?
ブラウザ内のクライアントが、ユーザーエクスペリエンスを損なうことなく(ブラウザをロックすることなく)ビッグデータをオブジェクトに逆シリアル化できるようにするにはどうすればよいでしょうか。Webワーカーが不在の場合、タイマー(タイムスライシング用)を使用したままになりますか?
javascript - 関数の評価
オブジェクト(関数を含む)といくつかのデータ、および引数を送信できる小さなライブラリを作成しようとしています。これにより、オブジェクト、データ、および引数がワーカープロセスに送信され、ワーカープロセスがオブジェクトを評価して再構築します。関数(文字列から関数まで)
現在私はこれを持っています:
JSON.stringify(object, function(key, val) {
if typeof val === 'function' { return val + '' }
return val
});
この関数は、関数を含むオブジェクトを文字列化します。
私の労働者では、このプロセスを元に戻そうとしています。
私は次のことを試しました
eval(object)
。JSON.parseの実装も試みましたが、関数に出くわしたときに各関数をeval()しようとしました。
私も試しましたeval("return " + object.function)
これは可能ですか?
jquery - Webワーカー内のJSonからAsp.Netへ。コントローラ内にメソッドが見つかりません
Webワーカー内にあるAsp.NetMVC3コントローラーにJSonを送信しています(jquery-hiveを使用)。PostMessageで、Asp.Netエラーをキャプチャして、コントローラーは検出されたが、アクションメソッドXがないことを通知できます。
コードを参照してください:ここでは、main.jsでワーカーを呼び出します:
worker.jsへのコード:
コントローラには次の方法があります。
ワーカーから返されるposMessageは、asp.netエラーです。
[HttpException]:パブリックアクションメソッド"Method1"がコントローラーSearchControllerで見つかりませんでした
javascript - ブラウザの速度を遅くする Javascript コード
私は WebWorkers 用のライブラリを作成しています。メイン ページ スレッドでスクリプトを実行する場合と、1 つまたは複数のワーカーでスクリプトを実行する場合の違いをテストしたいと考えています。問題は、違いを観察できるほどブラウザに負担をかける短い関数をすぐに見つけることができないことです。
クイック検索ではあまり結果が得られませんでしたが、何を検索すればよいかよくわからないだけかもしれません。通常、コードを遅くするのではなく、コードを最適化しようとします...
純粋な Javascript で簡単に実装でき、DOM や XHR に依存せず、引数を渡して計算の範囲を制限または指定できるアルゴリズムまたはパターンを探しています (無限のアルゴリズムはありません)。1 秒 < 平均時間 < 10 秒。
再帰なしで構築でき、可能な限りプロセッサを集中的に使用しながら、重大なメモリを消費しない場合は、追加のポイント。
html - Web Worker 内から WebGL を使用する: 可能ですか? どのように?
この行列乗算ベンチマークを開くと、ベンチマークが終了するまでブラウザー (Firefox 7.0.1) がフリーズしました (古い Asus EeePC 1000H でページを開きました)。
Web ワーカーは、処理と Web ページの表示を分離するために発明されたと聞きました。Web Workers API を利用して、WebGL が Web ブラウザ全体を停止させないようにすることは可能ですか?