我们可以在JavaScript中实现多线程吗?
如果是,请建议在JavaScript / Angular中的多个线程上运行多个任务的方法。
由于
答案 0 :(得分:7)
您可以使用Web worker,这是一个不阻止UI的专用线程。 他们在后台线程中工作
Web Workers是Web内容在其中运行脚本的简单方法 背景线程。工作线程可以不执行任务 干扰用户界面。此外,他们可以执行I / O. 使用XMLHttpRequest(虽然是responseXML和channel属性 总是空的)。一旦创建,工作人员就可以向其发送消息 通过将消息发布到事件来创建它的JavaScript代码 由该代码指定的处理程序(反之亦然。)本文提供 关于使用网络工作者的详细介绍。
<强> mainThread.js 强>
if (window.Worker) {
var myWorker = new Worker('worker.js');
// Posting data to worker
myWorker.postMessage('Message posted to worker');
// Receiving data from worker
myWorker.onmessage = function(e) {
console.log('Message received from worker: ' + e.data);
}
}
<强> worker.js 强>
onmessage = function(e) {
// Receiving data from main thread
console.log('Message received from main script: ' + e.data);
// Posting data to the main thread
postMessage('Posting message back to main script');
}
有关详细信息,请阅读MDN Web Workers
中的文档答案 1 :(得分:1)
使用
Web worker
你可以实现多线程使用 使用service-worker
,它将像您的代理服务器一样,您可以在网络级别实现多线程。
关于服务工作者的注意事项:
onfetch
和onmessage
处理程序。如果有您的信息
需要在重新启动时保持并重用,服务工作者确实需要
访问IndexedDB API。