在线使用 | English | 更新日志 | 问题反馈 | Gitee
StringWorker 致力于帮助开发者低成本接入WebWorker,在webpack和rollup项目中,引入js或者ts模块作为worker内部代码,无需单独维护woker内部代码
npm i string-worker
import StringWorker from 'string-worker';
<script src="https://cdn.jsdelivr.net/npm/string-worker/string-worker.min.js">script>
<script>
window.StringWorker;
script>
const worker = new StringWorker(/* javascript*/`
globalThis.addEventListener('message', function (e) {
var data = e.data;
// do something...
console.log('Worker Receive: ', data);
globalThis.postMessage('Worker Send: '+data);
}, false);
`);
worker.onMessage(data => {
console.log(data);
});
worker.postMessage('Hello World');
const worker = new StringWorker(/* javascript*/`
globalThis.addEventListener('message', function (e) {
var data = e.data;
console.log('Worker Receive: ', data);
// do something...
var message = 'Worker Send: '+data.message;
globalThis.postMessage({
message: message,
id: data.id
});
}, false);
`);
let id = 0;
worker.postMessage({
message: 'Hello World',
id: `msg_${id++}`, // 需要传入唯一id以匹配消息
}).then(d => {
console.log('Worker Return: ', d);
});
const worker = new StringWorker({
setup () { // 非必须
return {msg: 'hello world'};
},
onmessage (message, data) { // 第二个参数为 setup的返回值
return {receive: message.send + data.msg};
}
});
worker.postMessage({send: 'Hello'}).then(d => {
console.log(d);
});
当使用ts引用时,可以传入泛型来规范 setup 返回值和 message类型
const worker = new StringWorker<
{msg: string}, // setup返回值
{send: string}, // 发送的类型
{receive: string} // 返回的类型
>({
setup () { // 非必须
return {msg: 'hello world'};
},
onmessage (message, data) { // 第二个参数为 setup的返回值
return {receive: message.send + data.msg};
}
});
worker.postMessage({send: 'Hello'}).then(d => {
console.log(d);
});
目前该部分正在开发中,目前开发者可自行编写一个独立的打包模块将 worker代码打包到一个文件中,然后引入该文件作为 StringWorker 构造参数实现loader功能