私の知る限り、Web ワーカーは別の JavaScript ファイルに記述し、次のように呼び出す必要があります。
new Worker('longrunning.js')
クロージャ コンパイラを使用してすべての JavaScript ソース コードを結合して縮小していますが、配布用にワーカーを別々のファイルに保持したくないと思っています。これを実現する方法はありますか?
new Worker(function() {
//Long-running work here
});
ファーストクラス関数が JavaScript にとって非常に重要であることを考えると、バックグラウンド作業を実行する標準的な方法では、なぜ Web サーバーから別の JavaScript ファイル全体をロードする必要があるのでしょうか。
ベストアンサー1
http://www.html5rocks.com/en/tutorials/workers/basics/#toc-inlineworkers
ワーカースクリプトをその場で作成したり、別のワーカーファイルを作成せずに自己完結型ページを作成したりしたい場合はどうすればよいでしょうか。Blob() を使用すると、ワーカーコードへの URL ハンドルを文字列として作成することで、メインロジックと同じ HTML ファイルにワーカーを「インライン」できます。
BLOB インライン ワーカーの完全な例:
<!DOCTYPE html>
<script id="worker1" type="javascript/worker">
// This script won't be parsed by JS engines because its type is javascript/worker.
self.onmessage = function(e) {
self.postMessage('msg from worker');
};
// Rest of your worker code goes here.
</script>
<script>
var blob = new Blob([
document.querySelector('#worker1').textContent
], { type: "text/javascript" })
// Note: window.webkitURL.createObjectURL() in Chrome 10+.
var worker = new Worker(window.URL.createObjectURL(blob));
worker.onmessage = function(e) {
console.log("Received: " + e.data);
}
worker.postMessage("hello"); // Start the worker.
</script>