当前位置:首页 > 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实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js手势实现

js手势实现

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

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现复制功能实现

js实现复制功能实现

使用document.execCommand方法(传统方式,已逐渐被弃用) 传统方式通过document.execCommand('copy')实现复制功能,需先选中文本。以下是一个完整示例: fu…