嵌入式 Web workers
2024-08-25 08:28:22
前言
虽然worker可以将复杂的运算放入单独线程去运算,不阻塞UI线程,但是,由于worker()的构造函数的参数不能读取本地的文件,只能来自网络,所以当在一个项目里想使用本地的模块函数,是一个很麻烦的过程,官方的方法也没有提供方便的做法。
解决方法
将函数转换为blob,然后生成URL对象。
function fn2workerURL(fn) {
var blob = new Blob(['('+fn.toString()+')()'], {type: 'application/javascript'})
return URL.createObjectURL(blob)
}
这样就可以直接在调用本地模块文件了。
demo
// worker.js
function scope() {
function timedCount(e) {
postMessage(e - 0 + 1);
} onmessage = function (oEvent) {
console.error('worker error ', oEvent); timedCount(oEvent.data);
};
} function fn2workerURL(fn) {
var blob = new Blob(['(' + fn.toString() + ')()'], {type: 'application/javascript'});
return URL.createObjectURL(blob);
} export default fn2workerURL(scope);
// main.js
... import workerUrl from './worker.js'; startWorker = () => {
if (typeof(Worker) !== 'undefined') {
if (!w) {
w = new Worker(workerUrl);
} w.postMessage('1'); w.onmessage = function (event) {
console.error('worker message: ', event.data);
};
} else {
alert('dont support worker');
}
};
最新文章
- JQM---列车时刻查询
- 转一篇Unity客户端与Java服务器的通信
- CSS 和 JS 文件合并工具
- Js原生 双向数据绑定
- Baxter机器人---安装SDK包(二)
- 面试题目“ABCDE × 4 = EDCBA”新解法
- Java [Leetcode 328]Odd Even Linked List
- WPF中Expander控件样式,ListBox的样式(带checkbox)恢复
- Azure File SMB3.0文件共享服务(1)
- Javascript之Dom学习
- awk的+=用法
- [2019.03.20]Linux Shell 执行传参数和expr
- html中div标签怎么用?
- C# 木马功能的简单实现
- GitHub18
- Android开源项目SlidingMenu学习(二)
- fread 不能读取最后一个数据块
- Swift 多态
- thinkphp 如何查询数据库
- 安卓备份 To Do(待办事项)的数据库