1

現在、私は次のコードを持っています:

これは私のHTMLドキュメント内にあります。

<script language="JavaScript" type="text/javascript" src="workerTest.js"></script>

今、私の理解と研究から、労働者は外部ファイルからでなければなりません。

だから私のworkerTest.js内に私は持っています

var iWorker = new Worker('workerTest.js');

私はすべての作品とそこにあるコードをworkerTest.js内で宣言し、外部ファイルからそれらの行を作成できるようにしたいと思います。

だから何かのような

var iWorker2 = new Worker('scripttagid');

明らかに上記のコードは間違っていますが、それが私のポイントを示していることを願っています。

これは可能ですか?もしそうなら、誰かが私を正しい方向に向けることができますか?おそらくいくつかのサンプルコード?

これが不可能な場合は、多くのワーカーファイルを回避するための最善の方法は何ですか。たくさんの作品がありますので。

4

3 に答える 3

2

まあ、一種:

<!-- won't be executed by browser because of the invalid type -->
<script type="text/worker" id="worker-code">
while(true) {

}
</script>

Javascript:

var workerCode = document.getElementById("worker-code").innerHTML;
//Could also just be var workerCode = 'while(true){}';

var BlobBuilder = window.WebKitBlobBuilder || window.MozBlobBuilder || window.OBlobBuilder || window.BlobBuilder,
    blobBuilder = new BlobBuilder(),
    URL = window.webkitURL || window.URL,
    blob, workerURL;

blobBuilder.append(workerCode);
blob = blobBuilder.getBlob("text/javascript");

workerURL = URL.createObjectURL( blob );
var iWorker = new Worker(workerURL);

要素も必要ないことに注意してください。コードを文字列に格納するの'while(true){}'は維持が難しいだけです。

デモ: http: //jsfiddle.net/pmSSf/(プロセッサーの使用量は急増しますが、UIスレッドで実行されないため、ページを使用できます)

于 2012-07-30T20:12:14.030 に答える
0

また、これらのドキュメントから、外部スクリプトを読み込んだり、サブワーカーやインラインワーカーを実装したりできることがわかりました。

インラインワーカーは、Esailijaによって説明されているBlobBuilder手法を使用します。

引用:

外部スクリプトの読み込み

importScripts()関数を使用して、外部スクリプトファイルまたはライブラリをワーカーにロードできます。このメソッドは、インポートするリソースのファイル名を表す0個以上の文字列を取ります。

この例では、script1.jsとscript2.jsをワーカーにロードします。

worker.js:

importScripts('script1.js');
importScripts('script2.js');

これは、単一のインポートステートメントとしても記述できます。

importScripts('script1.js', 'script2.js');

サブワーカー

労働者は児童労働者を生み出す能力を持っています。これは、実行時に大きなタスクをさらに分割するのに最適です。ただし、サブワーカーにはいくつかの注意点があります。

サブワーカーは、親ページと同じオリジン内でホストされている必要があります。サブワーカー内のURIは、(メインページではなく)親ワーカーの場所を基準にして解決されます。ほとんどのブラウザは、ワーカーごとに個別のプロセスを生成することに注意してください。ワーカーファームを生成する前に、ユーザーのシステムリソースを大量に消費することに注意してください。この理由の1つは、メインページとワーカーの間で受け渡されるメッセージが共有ではなくコピーされることです。メッセージパッシングを介したワーカーとの通信を参照してください。

サブワーカーを生成する方法のサンプルについては、仕様の例を参照してください。

インラインワーカー

ワーカースクリプトをその場で作成したい場合、または個別のワーカーファイルを作成せずに自己完結型のページを作成したい場合はどうなりますか?新しいBlobBuilderインターフェースでは、BlobBuilderを作成し、ワーカーコードを文字列として追加することで、メインロジックと同じHTMLファイルにワーカーを「インライン化」できます。

于 2012-07-30T20:21:27.537 に答える
0

私の小さなプラグインhttps://github.com/zevero/worker-createを使用できます

var worker_url = Worker.create(function(e){
  self.postMessage('Example post from Worker'); //your code here
});
var worker = new Worker(worker_url);
于 2015-10-18T12:56:28.337 に答える