Web Worker需要单独写一个js文件,使用起来比较麻烦,如果在主程序里动态创建,并能动态销毁的话,使用起来将会方便很多:
const create = f => {
if(f instanceof Worker) return f;
if(typeof f === 'string' && f.endsWith('.js')) return new Worker(f);
if(typeof f === 'function') {
const code = [
`self.fn = ${f.toString()};`,
'self.onmessage = (e) => {',
' const r = self.fn(e.data);',
' self.postMessage(r);',
'}'
];
const blob = new Blob(code, {type: 'text/javascript'});
const url = URL.createObjectURL(blob);
const worker = new Worker(url);
worker.cleanup = () => {
URL.revokeObjectURL(url);
worker.terminate();
};
return worker;
}
};
创建的worker实例添加了一个cleanup方法,用来关闭worker的同时,销毁url占用的内存。
参考链接:https://juejin.im/post/5e141875e51d454126369cf4
关键词:jsworker
所属分类:网站技术
本文地址:https://me.i-i.me/article/27.html
评论