String-Worker 让创建 WebWorker 更轻松

StringWorker

stars forks version downloads jsdelivr issue

author license Size TopLang Dependent test

🚀 让创建 WebWorker 更轻松

在线使用 | English | 更新日志 | 问题反馈 | Gitee

0. 介绍

StringWorker 致力于帮助开发者低成本接入WebWorker,在webpack和rollup项目中,引入js或者ts模块作为worker内部代码,无需单独维护woker内部代码

0.2 特性

  1. 使用code字符串初始化worker,无需使用第三方url
  2. 支持 Promise 获取worker返回的消息
  3. 支持webpack、rollup引入loader使用 (开发中…)

1. 快速使用

1.0 install

1.0.1 npm install
npm i string-worker
import StringWorker from 'string-worker';
1.0.2 cdn
<script src="https://cdn.jsdelivr.net/npm/string-worker/string-worker.min.js"></script>
<script>
  window.StringWorker;
</script>

1.1 使用字符串初始化

1.1.1 使用原始数据
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');
1.1.2 使用 promise 获取worker的返回值
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);
});

1.2. 使用函数初始化

1.2.1 使用js
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);
});
1.2.2 使用ts传入泛型 声明类型

当使用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);
});

2 使用 string-worker-loader (开发中…)

目前该部分正在开发中,目前开发者可自行编写一个独立的打包模块将 worker代码打包到一个文件中,然后引入该文件作为 StringWorker 构造参数实现loader功能

2.1 webpack-loader

2.2 rollup-loader

2.3 esbuild-loader

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package edu.cn.neusoft.project.controller; import edu.cn.neusoft.project.model.service.WorkerService; import javafx.concurrent.Worker; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller public class WorkerAction { @Autowired private WorkerService service; @RequestMapping("login.action") public String login(){ return"login"; } @RequestMapping("loginSuccess.action") public String loginSuccess(String username,String password){ boolean ret; ret = service.login( new Worker(username,password)); if(ret){ return"loginSuccess"; } return "login"; } @ResponseBody @RequestMapping("worker.action") public List<edu.cn.neusoft.project.model.vo.Worker> worker(Model model) { List<edu.cn.neusoft.project.model.vo.Worker> list = service.showAll(); Model list1 = model.addAttribute("list", list); // for(Worker worker : list){ // System.out.println(worker); // } return list; } @ ResponseBody @ RequestMapping("updateWorker. action" ) public void updateWorker( Worker worker){ System. out. println(" ---up" + worker); service . updateWorker ((edu.cn.neusoft.project.model.vo.Worker) worker); } @ ResponseBody @ RequestMapping (" deleteWorker. action") public void deleteWorker( Integer wid){ // System. out. println("--delt--"+ wid); service . deleteWorker(wid); } @ RequestMapping("regist. action" ) public String regist(){ return "regist"; } @ RequestMapping(" registSuccess. action" ) public String registSuccess(Worker worker){ service . regist((edu.cn.neusoft.project.model.vo.Worker) worker); return "login" ; } }哪里错了?请写出正确代码
05-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值