当前位置:首页 > JavaScript

js线程实现

2026-04-05 18:43:38JavaScript

JavaScript 线程实现方式

JavaScript 是单线程语言,但可以通过以下方式模拟多线程或实现并发操作:

Web Workers

Web Workers 允许在后台运行脚本,独立于主线程,适合计算密集型任务。

js线程实现

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

// worker.js
self.onmessage = (e) => {
  console.log('Message from main:', e.data);
  self.postMessage('Work done');
};

Service Workers

主要用于离线缓存和网络请求拦截,运行在独立线程。

js线程实现

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

// sw.js
self.addEventListener('fetch', event => {
  event.respondWith(
    caches.match(event.request).then(response => {
      return response || fetch(event.request);
    })
  );
});

Shared Workers

多个浏览器窗口共享的 worker 实例。

// 主线程
const sharedWorker = new SharedWorker('shared-worker.js');
sharedWorker.port.start();
sharedWorker.port.postMessage('Hello shared worker');

// shared-worker.js
let ports = [];
self.onconnect = (e) => {
  const port = e.ports[0];
  ports.push(port);
  port.onmessage = (e) => {
    ports.forEach(p => p.postMessage(e.data));
  };
};

异步编程模式

虽然非真正多线程,但能实现非阻塞操作。

// Promise
new Promise((resolve) => {
  setTimeout(() => resolve('Done'), 1000);
}).then(console.log);

// async/await
async function fetchData() {
  const response = await fetch('api/data');
  const data = await response.json();
  console.log(data);
}

注意事项

  • Web Workers 无法直接访问 DOM
  • 线程间通信需通过 postMessage
  • 大量数据传输需考虑结构化克隆算法的性能
  • 服务端 Node.js 可通过 worker_threads 模块实现真线程

这些方法可根据具体需求选择,Web Workers 最适合需要并行计算的场景,而异步模式适合I/O密集型任务。

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

相关文章

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js防抖和节流实现

js防抖和节流实现

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

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…