首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >PWA >如何在PWA中使用Service Workers?

如何在PWA中使用Service Workers?

词条归属:PWA

要在PWA中使用Service Worker,需要遵循以下步骤:

注册Service Worker

在应用程序中注册Service Worker,可以在应用程序的JavaScript代码中使用以下代码:

代码语言:javascript
复制
if ('serviceWorker' in navigator) {
  window.addEventListener('load', function() {
    navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
      console.log('Service Worker 注册成功:', registration.scope);
    }, function(err) {
      console.log('Service Worker 注册失败:', err);
    });
  });
}

这段代码会检查浏览器是否支持Service Worker,如果支持,就在页面加载完成后注册Service Worker。在注册Service Worker时,需要指定Service Worker脚本文件的位置。

缓存应用程序资源

在Service Worker脚本文件中,可以使用以下代码缓存应用程序的资源:

代码语言:javascript
复制
self.addEventListener('install', function(event) {
  event.waitUntil(
    caches.open('myapp-static-v1').then(function(cache) {
      return cache.addAll([
        '/',
        '/index.html',
        '/styles.css',
        '/main.js',
        '/images/logo.png'
      ]);
    })
  );
});

这段代码会在Service Worker安装时,打开一个缓存并将应用程序的资源添加到缓存中。

处理离线请求

在Service Worker脚本文件中,可以使用以下代码处理离线请求:

代码语言:javascript
复制
self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request).then(function(response) {
      if (response) {
        return response;
      } else {
        return fetch(event.request);
      }
    })
  );
});

这段代码会在每次网络请求时,检查缓存中是否存在响应。如果存在,就返回缓存的响应。否则,就使用fetch()方法从网络获取响应。

更新缓存

在Service Worker脚本文件中,可以使用以下代码更新缓存:

代码语言:javascript
复制
self.addEventListener('activate', function(event) {
  event.waitUntil(
    caches.keys().then(function(cacheNames) {
      return Promise.all(
        cacheNames.filter(function(cacheName) {
          return cacheName.startsWith('myapp-') && cacheName !== 'myapp-static-v1';
        }).map(function(cacheName) {
          return caches.delete(cacheName);
        })
      );
    })
  );
});

这段代码会在Service Worker激活时,检查所有缓存,并删除旧的缓存。这样,当应用程序更新时,缓存中的响应将是最新的。

相关文章
[译] JS 中 service workers 的简介
Service workers是Progressive Web Apps的核心部分,允许缓存资源和Web推送通知等,以创建良好的离线体验。它们充当Web应用程序,浏览器和网络之间的代理,允许开发人员拦截和缓存网络请求,并基于网络的可用性采取适当的操作。
Jimmy_is_jimmy
2020-10-15
9930
[译] JS 中 service workers 的简介
一个service worker在单独的线程上运行,因此它是非阻塞的。这也意味着它无法访问主JavaScript线程中可用的DOM和其他API,比如cookie,XHR,Web存储API(本地存储和会话存储)等。由于它们被设计为完全异步,因此它们重度依赖promise来等待网络请求的响应。
Jimmy_is_jimmy
2019-07-31
1.1K0
在项目中使用Service Worker 与 PWA
Web Worker 是浏览器内置的线程,用于执行非阻塞事件循环的 JavaScript 代码。由于 JavaScript 是单线程语言,一次只能处理一个任务。复杂任务的出现可能导致主线程被阻塞,严重影响用户体验。Web Worker 的作用是允许主线程创建 worker 线程,使它们可以同时运行。Worker 线程主要负责处理复杂的计算任务,然后将结果返回给主线程。简而言之,worker 线程执行复杂计算,同时保持页面(主线程)的流畅性,不会造成阻塞。
linwu
2023-10-16
1K0
《从网页到桌面:PWA如何借两大核心实现离线启动》
传统网页受制于网络波动,往往在信号中断时沦为无法交互的静态页面;而原生应用虽能常驻设备,却受限于开发成本与跨平台适配的壁垒。PWA的出现,恰是在这两者之间开辟了一条新路径,而Web App Manifest与Service Workers的协同,正是这条路径的核心骨架——它们让网页不仅能被“安装”为设备的常驻成员,更能在离线环境中保持核心功能的流畅运转,从根本上重构了用户对网页应用的体验认知。Web App Manifest的价值,远不止于为应用生成一个桌面图标那么简单。它是PWA向设备“宣告身份”的核心文件,通过一系列精细的定义,将网页从“浏览器中的临时访客”转化为“设备生态中的正式成员”。其设定的应用名称、图标集、启动URL,构成了用户识别与调用应用的基础——图标不再是模糊的网页缩略图,而是符合设备设计规范的矢量图形;启动路径不再需要通过浏览器地址栏输入,而是一键直达的独立入口。这种身份的转变,带来的是用户心理认知的深层变化:当应用以独立图标的形式出现在手机桌面或电脑启动栏,它便从“需要主动搜索的工具”变成了“触手可及的伙伴”,使用频率自然随之提升。Manifest对显示模式的定制,更在视觉层面强化了这种“原生感”。它可以指定应用以全屏模式启动,剔除浏览器的地址栏、书签栏等冗余元素,让界面完全聚焦于应用内容;也可以选择“独立窗口”模式,保留最小化的导航控件,同时避免被其他标签页干扰。这种对显示空间的精准掌控,使得应用的交互设计能更充分地利用屏幕尺寸,无论是触控操作的热区布局,还是信息层级的视觉呈现,都能达到与原生应用相近的精细度。而启动画面与主题颜色的设定,则在用户等待的瞬间构建起品牌认知的连贯性——当应用启动时,屏幕上显示的不再是单调的白屏,而是带有品牌标识的过渡画面,主题色则从启动瞬间延续到应用界面,形成视觉上的流畅衔接,减少用户的等待焦虑。
程序员阿伟
2025-07-24
1600
更真、更强、更快的Web应用-Progressive Web Apps
0.Progressive Web Apps 2016年Progressive Web Apps(文后简称PWA)风劲较大,本文作者详细梳理了PWA现状,希望能帮助读者更深入了解PWA,主要内容如下: PWA定义:描述一下PWA的缘起与使命。 PWA技术:说明完成PWA开发需要使用哪些技术,主要介绍Web App Manifest(使web更像native)、Service Workers(增强web能力)、Application Shell(提升web效率)等使用场景和基本原理。 PWA优势:通过相关
yuanyi928
2018-04-02
2.1K0
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券