前言

虽然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');
}
};

最新文章

  1. JQM---列车时刻查询
  2. 转一篇Unity客户端与Java服务器的通信
  3. CSS 和 JS 文件合并工具
  4. Js原生 双向数据绑定
  5. Baxter机器人---安装SDK包(二)
  6. 面试题目“ABCDE × 4 = EDCBA”新解法
  7. Java [Leetcode 328]Odd Even Linked List
  8. WPF中Expander控件样式,ListBox的样式(带checkbox)恢复
  9. Azure File SMB3.0文件共享服务(1)
  10. Javascript之Dom学习
  11. awk的+=用法
  12. [2019.03.20]Linux Shell 执行传参数和expr
  13. html中div标签怎么用?
  14. C# 木马功能的简单实现
  15. GitHub18
  16. Android开源项目SlidingMenu学习(二)
  17. fread 不能读取最后一个数据块
  18. Swift 多态
  19. thinkphp 如何查询数据库
  20. 安卓备份 To Do(待办事项)的数据库

热门文章

  1. 003-shell 传递参数
  2. 使用python操作json文本文件
  3. strtok - 详细示例解析
  4. H5移动端的一些坑、、、
  5. quick-cocos2d-x + Lua 开发
  6. Linux系统——sed命令
  7. 一步一步学EF系列【5、升级篇 实体与数据库的映射】live writer真坑,第4次补发
  8. Printf的缓冲机制
  9. CF1155D Beautiful Array(动态规划)
  10. Alluxio集成Hadoop