Skip to content

Instantly share code, notes, and snippets.

@petamoriken
Created November 23, 2015 03:11
Show Gist options
  • Save petamoriken/e0cf65b648473bcaf2aa to your computer and use it in GitHub Desktop.
Save petamoriken/e0cf65b648473bcaf2aa to your computer and use it in GitHub Desktop.
InlineWorker の生成(function によるラッパー vs Worker クラスの継承)
function createInlineWorker(func) {
if(typeof func !== "function")
throw new TypeError("Please set function");
let str = `(${func.toString()})()`;
//let str = func.toString().match(/\s*{([\w\W]*?)}$/)[1];
let blob = new Blob([str], {type:"text/javascript"});
return new Worker(URL.createObjectURL(blob));
}
class InlineWorker extends Worker {
constructor(func) {
if(typeof func !== "function")
throw new TypeError("Please set function");
let str = `(${func.toString()})()`;
//let str = func.toString().match(/\s*{([\w\W]*?)}$/)[1];
let blob = new Blob([str], {type:"text/javascript"});
super(URL.createObjectURL(blob));
}
}
@petamoriken
Copy link
Author

createInlineWorker.js は Babel で動くが、InlineWorkerClass.js は Babel で動かない。
(Babel がビルトインクラスの継承に非対応なため。Firefox Nightly では動く)

なお str の正規表現をコメントアウトしているが、その上の括弧を付けて即時函数化したコードでも問題なさそうだったため、そっちに移行した。
……もしかしたら問題が起こるかも。

@petamoriken
Copy link
Author

使う場合は PhantomJS の page.evaluate みたいな罠があるので注意。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment