当前位置:首页 > JavaScript

js实现多线程

2026-03-01 04:44:02JavaScript

JavaScript 多线程实现方法

JavaScript 本身是单线程语言,但可以通过 Web Workers、Service Workers 或 SharedArrayBuffer 等技术实现类似多线程的效果。

js实现多线程

Web Workers

Web Workers 允许在后台线程中运行脚本,避免阻塞主线程。创建一个新的 Worker 实例,通过 postMessageonmessage 进行通信。

js实现多线程

// 主线程代码
const worker = new Worker('worker.js');
worker.postMessage({ data: 'Hello Worker' });
worker.onmessage = (event) => {
  console.log('Message from worker:', event.data);
};

// worker.js
self.onmessage = (event) => {
  console.log('Message from main thread:', event.data);
  self.postMessage({ data: 'Hello Main Thread' });
};

Service Workers

Service Workers 主要用于离线缓存和网络请求拦截,但也可以用于后台任务处理。注册一个 Service Worker 并监听事件。

// 主线程注册
navigator.serviceWorker.register('sw.js').then(() => {
  console.log('Service Worker registered');
});

// sw.js
self.addEventListener('install', (event) => {
  console.log('Service Worker installed');
});

SharedArrayBuffer

SharedArrayBuffer 允许多个线程共享同一块内存,适用于高性能计算场景。需要配合 Web Workers 使用。

// 主线程
const sharedBuffer = new SharedArrayBuffer(1024);
const worker = new Worker('worker.js');
worker.postMessage({ buffer: sharedBuffer });

// worker.js
self.onmessage = (event) => {
  const sharedBuffer = event.data.buffer;
  const sharedArray = new Int32Array(sharedBuffer);
  Atomics.add(sharedArray, 0, 1);
};

注意事项

  • Web Workers 无法直接操作 DOM,需通过消息传递与主线程交互。
  • Service Workers 主要用于网络请求处理,生命周期由浏览器控制。
  • SharedArrayBuffer 需要服务器设置特定的 HTTP 头(如 COOPCOEP)才能启用。

以上方法可以根据实际需求选择,Web Workers 是最常用的多线程解决方案。

标签: 多线程js
分享给朋友:

相关文章

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:CSS…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…