html 代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function feb(n) {
if (n == 1 || n == 2) {
return 1
}
return feb(n - 1) + feb(n - 2)
}
let a = +new Date();
let n1 = 42;
let data2 = feb(n1)
console.log(data2);
console.log('未开启多线程单个耗时:',+new Date() - a);
let time1 = +new Date();
let promiseArr = []
for (let index = 0; index < 13; index++) {
let worker = new Worker('worker.js')
let p = new Promise((resolve, reject) => {
worker.postMessage(n1)
worker.onmessage = e => {
resolve(e.data)
}
worker.onerror = error => {
reject(error)
}
})
promiseArr.push(p);
}
console.log(promiseArr);
Promise.all(promiseArr).then(data => {
console.log(data);
console.log('开启多线程耗时:',+new Date() - time1);
})
</script>
</body>
</html>
worker.js
function feb(n) {
if (n==1||n==2) {
return 1
}
return feb(n-1)+feb(n-2)
}
let a = +new Date();
let n= 2;
self.onmessage = function(event) {
n = event.data;
console.log("onmessage:",event.data);
let data1 = feb(n)
console.log(+new Date()-a);
self.postMessage(data1)
self.close();
};
ArrayBuffer and Str
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
class WorkersClass {
constructor(n) {
this.n = n
}
}
let newData = new WorkersClass(1);
// myWorker = new SharedWorker("worker.js");
// myWorker.port.postMessage(newData);
// myWorker.port.onmessage = function (e) {
// var result = e.data;//此处就是共享现成推送过来的数据可以是字符串、数组、json
// /***********上面拿到数据后,就可以在下面做一些你想造做的事************/
// console.log(result);
// };
let worker = new Worker('./worker.js')
// worker.onmessage = (event) => {
// console.log(event.data)
// }
const arrayBuffer = new ArrayBuffer(10)
console.log(arrayBuffer);
worker.postMessage(arrayBuffer, [arrayBuffer])
console.log(arrayBuffer)
</script>
</body>
</html>
js
let sum = 0
let num = 10000
for (let i = 0; i < num; i++) {
sum = sum + i
}
console.log('worker compute sum = %d', sum)
// self.postMessage({
// data: '999'
// })
self.onmessage = (event) => {
console.log(event.data, '--')
function str2ab(s,f) {
var b = new Blob([s],{type:'text/plain'});
var r = new FileReader();
r.readAsArrayBuffer(b);
r.onload = function (){if(f)f.call(null,r.result)}
}
function ab2str(u,f) {
var b = new Blob([u]);
var r = new FileReader();
r.readAsText(b, 'utf-8');
r.onload = function (){if(f)f.call(null,r.result)}
}
str2ab('str',function(ab){
console.log(ab);
ab2str(ab,function(str){
//str为字符串
console.log(str);
});
});
const arrayBuffer = new ArrayBuffer(64)
self.postMessage(arrayBuffer, [arrayBuffer])
console.log(arrayBuffer)
}
arrayBuffer 转字符串另外一种方法
// 使用TextDecoder
var enc = new TextDecoder("utf-8");
var uint8_msg = new Uint8Array(evt.data);
console.log(enc.decode(uint8_msg));
// 再转换为json