React中使用Workbox进行预缓存的实现代码

 更新时间:2023年11月07日 09:09:27   作者:颜正义  
Workbox是Google Chrome团队推出的一套 PWA 的解决方案,这套解决方案当中包含了核心库和构建工具,因此我们可以利用Workbox实现Service Worker的快速开发,本文小编给大家介绍了React中使用Workbox进行预缓存的实现,需要的朋友可以参考下

Workbox 是什么

Workbox 是 Google Chrome 团队推出的一套 PWA 的解决方案,这套解决方案当中包含了核心库和构建工具,因此我们可以利用 Workbox 实现 Service Worker 的快速开发。以下内容基于webpack进行讲解以及安装

Workbox 内置于 Create React App (CRA) 中,其默认配置会在每次构建时预缓存应用中的所有静态资源。

Workbox 如何使用

  • 首先安装 workbox-webpack-plugin
npm install workbox-webpack-plugin
  • 在webpack config 中引入
const { GenerateSW, InjectManifest } = require('workbox-webpack-plugin')
  • 在 src/index.js 文件中启用它即可在每个 build 中注册一个新的 Service Worker
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
ReactDOM.render(<App />, document.getElementById('root'));

serviceWorker.unregister();
serviceWorker.register();

GenerateSW 和InjectManifest 的区别

generateSWinjectManifest 是 Workbox 构建工具中两种不同的策略,用于生成和配置 Service Worker 脚本。它们具有不同的特点和用途:

  • generateSW

    • generateSW 是 Workbox 构建工具的一种策略,它用于生成 Service Worker 文件,包括缓存策略和预缓存的资源列表。
    • 使用 generateSW 时,您只需提供一个配置文件,通常称为 workbox-config.js,以指定预缓存的资源列表、缓存策略和其他相关选项。
    • generateSW 会自动创建一个 Service Worker 文件,无需您手动编写它。这个生成的 Service Worker 文件包含了 Workbox 提供的缓存策略和路由配置。
    • 这种策略适用于大多数情况下,特别是对于初学者或不需要自定义 Service Worker 行为的情况。
  • injectManifest

    • injectManifest 是 Workbox 构建工具的另一种策略,它允许您手动编写自定义的 Service Worker 文件,并将 Workbox 缓存策略注入到其中。
    • 使用 injectManifest 时,您需要自己编写 Service Worker 文件,并在其中指定 Workbox 的缓存策略和路由配置。
    • 这个策略更适用于需要高度自定义 Service Worker 行为的情况,或者已经有现有 Service Worker 文件,需要将 Workbox 缓存策略集成进去。
    • 您可以将 Workbox 生成的缓存策略注入到您已经存在的 Service Worker 文件中,以实现更灵活的控制。

总的来说,generateSW 是一种简单且自动化的方式,适合大多数情况,而 injectManifest 则更适合需要更多自定义控制的情况。您可以根据项目需求和自己的技术水平选择适合您的策略。无论您选择哪种策略,都能够让您利用 Workbox 提供的缓存和离线支持来提高 Web 应用程序的性能和可靠性。

Workbox 配置, 还算完整的配置

new GenerateSW({
      cacheId: '', // 设置前缀
      swDest: 'serviceWorker.js',
      importScripts:[], // 如果需要在项目之外额外引入并预加载一些代码
      disableDevLogs: true,
      clientsClaim: true,  // 是否实现即时更新
      skipWaiting: true,   // 是否跳过等待阶段
      maximumFileSizeToCacheInBytes: 100 * 1024 * 1024,  // 预缓存的最大文件的大小
      chunks:[],  // 手动加载需要引入的东西 完整路径
      excludeChunks: [],  // 手动过滤不需要引入的东西, 路径
      include: [/\.html$/, /\.js$/, /\.css$/, /\.(?:png|gif|jpg|jpeg|svg)$/], //匹配文件
      exclude: [/^main.*/],  //忽略的文件
      runtimeCaching: [
          {
              urlPattern: /\.(?:png|gif|jpg|jpeg|svg)[\?]?/,   // 正则进行匹配文件格式
              handler: 'CacheFirst',   // 缓存策略
              options: {
                cacheName: `image-cache`,   // 缓存名称
                cacheableResponse: {
                  statuses: [0, 200]     
                },
                expiration: {
                  maxEntries: 60, // 最大的缓存数,超过之后则走 LRU 策略清除最老最少使用缓存
                  maxAgeSeconds: 30 * 24 * 60 * 60 // 最长缓存时间为 30 天
                }
              }
        },
      ], // 设置缓存策略
  })

Workbox路由以及缓存策略

Workbox中的路由是指可以使用的一种机制,用于定义请求和响应的处理方式。Workbox的路由可以用于缓存策略、路由处理、动态缓存、网络请求拦截等。它允许您为不同的URL模式和HTTP方法设置不同的处理方式。 下面是一些关于如何使用Workbox路由的示例:

  • 基本路由:
workbox.routing.registerRoute(
  '/example/path',
  new workbox.strategies.CacheFirst()
);

这个示例将'/example/path'的请求路由到Cache First策略,意味着首先尝试从缓存中获取响应,如果缓存中没有,则从网络获取。

  • 使用正则表达式进行路由匹配:
workbox.routing.registerRoute(
  new RegExp('^https://api.example.com/'),
  new workbox.strategies.NetworkFirst()
);

这个示例使用正则表达式匹配所有以'api.example.com/'开头的请求,并使用N… First策略。 3.自定义路由匹配条件

workbox.routing.registerRoute(
  ({url, event}) => url.pathname.startsWith('/images/'),
  new workbox.strategies.StaleWhileRevalidate()
);

这个示例使用自定义匹配条件,仅当URL的路径以'/images/'开头时,使用Stale While Revalidate策略。 4.路由参数:

workbox.routing.registerRoute(
  ({request, url}) => {
    return request.mode === 'navigate' && url.pathname.startsWith('/article/');
  },
  new workbox.strategies.NetworkFirst()
);

这个示例使用自定义条件,仅当请求模式是导航(navigate)且路径以'/article/'开头时,使用Network First策略。

Workbox 预缓存

Workbox的预缓存是指在应用程序安装阶段将特定资源缓存到Service Worker的缓存中,以确保这些资源在离线状态下可用。这通常用于缓存应用程序的核心资源,以提高应用程序的性能和可靠性。

Workbox官网地址

PS: 总的来说,Workbox 是一个功能丰富的工具集,用于增强 Web 应用程序的性能、可靠性和离线体验。它为开发者提供了强大的工具和灵活的配置选项,以帮助他们轻松地实现离线支持和高级缓存控制。这使得 Web 应用程序能够更好地应对不稳定的网络连接和提供更快的加载速度。

以上就是React中使用Workbox进行预缓存的实现代码的详细内容,更多关于React Workbox预缓存的资料请关注脚本之家其它相关文章!

相关文章

  • React-Native 环境搭建和基本介绍

    React-Native 环境搭建和基本介绍

    这篇文章主要介绍了React-Native 环境搭建和基本介绍的相关资料,包括react native优缺点,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-04-04
  • 理解react中受控组件和非受控组件及应用场景

    理解react中受控组件和非受控组件及应用场景

    当涉及到React框架时,了解受控组件和非受控组件是非常重要的概念,本文主要介绍了理解react中受控组件和非受控组件及应用场景,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • React特征学习之Form格式示例详解

    React特征学习之Form格式示例详解

    这篇文章主要为大家介绍了React特征学习之Form格式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • React中的函数式插槽详解

    React中的函数式插槽详解

    这篇文章主要为大家详细介绍了React 开发中遇到的具名插槽的函数用法,文中的示例代码讲解详细,具有一定的学习价值,有兴趣的小伙伴可以了解一下
    2023-11-11
  • react循环数据(列表)的实现

    react循环数据(列表)的实现

    这篇文章主要介绍了react循环数据的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • react自动化构建路由的实现

    react自动化构建路由的实现

    这篇文章主要介绍了react自动化构建路由的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 在React中强制重新渲染的4 种方式案例代码

    在React中强制重新渲染的4 种方式案例代码

    这篇文章主要介绍了在React中强制重新渲染的4 种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • React中useState和useEffect的用法详解

    React中useState和useEffect的用法详解

    Hooks 发布之后,函数组件能拥有自己的 state,React提供了很多内置的Hooks,这篇文章就来和大家介绍一下useState 和 useEffect的使用,需要的可以参考一下
    2023-06-06
  • React中使用UMEditor的方法示例

    React中使用UMEditor的方法示例

    这篇文章主要介绍了React中使用UMEditor的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • React-Native 组件之 Modal的使用详解

    React-Native 组件之 Modal的使用详解

    本篇文章主要介绍了React-Native 组件之 Modal的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论