由于 Web Worker 在线程之间序列化 JSON 数据,因此像这样的东西不起作用:
worker.js
function Animal() {}
Animal.prototype.foobar = function() {}
self.onmessage = function(e) {
self.postMessage({animal: new Animal()})
}
main.js
(Note: This is already in Chinese. It simply states the file name "main.js" within HTML code.)
let worker = new Worker('worker.js')
worker.onmessage = function(e) {
console.log(e.data)
}
worker.postMessage('go!')
结果将是一个简单的对象,其中丢失了foobar
原型方法。
是否可以在不丢失其原型方法的情况下将自定义对象传输回主线程?比如说,使用ArrayBuffer
是否可能实现这一点?我对这方面不太熟悉,所以有些迷茫。
new Animal(JSON.parse(e.data))
不是也可以实现同样的效果吗?没有必要使用reviver吗?或者您的解决方案更快一些?我的主要目标是在工作线程内完成大部分工作,而不会阻塞主线程。 - Martin Brodervar zoo = new Zoo({jail1: new Lion('pepe',12), jail2: new Tigger('winny', 5)}); worker.postMessage(zoo);
- Emilio Platzer