Created
November 23, 2015 03:11
-
-
Save petamoriken/e0cf65b648473bcaf2aa to your computer and use it in GitHub Desktop.
InlineWorker の生成(function によるラッパー vs Worker クラスの継承)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | |
} | |
} |
使う場合は PhantomJS の page.evaluate みたいな罠があるので注意。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
createInlineWorker.js は Babel で動くが、InlineWorkerClass.js は Babel で動かない。
(Babel がビルトインクラスの継承に非対応なため。Firefox Nightly では動く)
なお str の正規表現をコメントアウトしているが、その上の括弧を付けて即時函数化したコードでも問題なさそうだったため、そっちに移行した。
……もしかしたら問題が起こるかも。