Zlog
首页归档关于
Zlog

一个探索技术、编程和构建 Web 的个人空间。

© 2026 Zlog

导航

首页归档关于

链接

/
|
·
·
·
首页/Service Worker

Service Worker

Web worker 是一种在浏览器中运行的后台脚本,它可以在独立的线程中执行任务,而不会阻塞主线程的执行。Web worker 的主要作用是处理耗时的计算任务,例如图片处理、文本分析、数据处理等,以避免阻塞主线程,提高页面的响应性能

Z

Zephyr110

2024年5月28日·4 分钟
|
frontendfrontend-javascript

Web worker

1. 什么是 Web worker

Web worker 是一种在浏览器中运行的后台脚本,它可以在独立的线程中执行任务,而不会阻塞主线程的执行。Web worker 的主要作用是处理耗时的计算任务,例如图片处理、文本分析、数据处理等,以避免阻塞主线程,提高页面的响应性能

2. Web worker 应用场景

  • 懒加载
  • 文本分析
  • 图片处理
  • canvas 图形绘制
  • 流媒体数据处理

3. Web worker 示例

3.1 创建 worker 文件(worker.js)

js
// worker.js
self.addEventListener('message', (event) => {
  console.log('收到消息:', event.data);
  // 处理消息
  // 发送响应
  self.postMessage('响应消息');
});

3.2 在主线程中使用 worker

js
// main.js
const worker = new Worker('worker.js');
worker.addEventListener('message', (event) => {
  console.log('收到响应:', event.data);
});
worker.postMessage('发送消息');

3.3 终止 worker

js
// main.js
worker.terminate();

Service worker

1. 什么是 Service worker

Service worker 是一种在浏览器中运行的后台脚本,它可以在独立的线程中执行任务,而不会阻塞主线程的执行。Service worker 的主要作用是处理网络请求、缓存资源、推送通知等,以提供离线访问、性能优化等功能。

2. Service worker 应用场景

  • 离线访问
  • 性能优化
  • 推送通知
  • 后台同步

3. Service worker 示例

3.1 注册 Service worker

js
if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker
      .register('/service-worker.js')
      .then((registration) => {
        console.log('Service worker 注册成功:', registration);
      })
      .catch((error) => {
        console.log('Service worker 注册失败:', error);
      });
  });
}

3.2 创建 Service worker 文件(service-worker.js)

js
// service-worker.js
self.addEventListener('install', (event) => {
  console.log('Service worker 安装成功:', event);
});
js
self.addEventListener('activate', (event) => {
  console.log('Service worker 激活成功:', event);
});

3.3 监听 Service worker 消息

js
// service-worker.js
self.addEventListener('message', (event) => {
  console.log('Service worker 收到消息:', event.data);
});

3.4 发送消息到 Service worker

js
// main.js
navigator.serviceWorker.controller.postMessage('发送消息');

3.5 终止 Service worker

js
// main.js
navigator.serviceWorker.controller.terminate();

4. 注意事项

  • 只能在 HTTPS 环境下运行,除非是在 localhost 上进行开发
  • 的生命周期与页面的生命周期是独立的
  • 只能通过 JavaScript 进行注册和管理
  • 不能直接操作 DOM
  • 需要处理好缓存和更新的问题
  • 需要考虑浏览器兼容性问题
  • 需要处理好网络请求的拦截和转发
  • 需要处理好离线访问和在线访问的切换
  • 需要处理好推送通知和后台同步的问题
  • 需要处理好安全性问题,防止恶意代码注入
  • 需要处理好性能问题,避免过多的资源消耗

5. 参考资料

  • MDN Web Docs - Using Service Workers
  • MDN Web Docs - Service Worker API

标签

frontendfrontend-javascript

评论 (0)

评论功能仅在主站可用,请访问 zephyr110.vercel.app

相关文章

OffscreenCanvas

MDN-OffscreenCanvas

2025年12月10日·7 分钟

vue-tour二次封装

npm install vue-tour

2023年7月22日·7 分钟

Web Components

Web components 是原生的组件化开发技术,它可以让我们创建自定义的 HTML 元素,并且功能和样式都会封装在组件内部,不影响其它的元素。

2023年1月1日·5 分钟

← 返回文章列表