前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏

完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

在实战篇中,我们对请求策略及缓存置换策略进行了讨论,通过这两个机制我们能够高效地利用本地缓存来提高应用性能及可用性。本章我们将学习这两个机制在 Workbox 中的使用。

# 请求策略

在实战篇:请求策略中,我们讨论了五种常见的请求策略,分别为:

  • 缓存优先:首先从缓存中进行匹配,如果存在相关请求的响应,返回该响应,否则通过网络获取。
  • 网络优先:首先通过网络获取,如果请求异常,则从缓存中获取。
  • 仅使用缓存:所有请求都从缓存中获取。
  • 仅使用网络:所有请求都从网络中获取。
  • 先缓存后网络:缓存优先的升级版,它与后者的唯一区别是,如果在缓存中匹配到相关请求的响应,在返回该响应的同时依旧会发起网络请求,并更新相关缓存。

Workbox 中的 workbox-strategies 模块为我们实现了上述常见策略,相关类分别为:

  • 缓存优先:workbox.strategies.CacheFirst。
  • 网络优先:workbox.strategies.NetworkFirst。
  • 仅使用缓存:workbox.strategies.CacheOnly。
  • 仅使用网络:workbox.strategies.NetworkOnly。
  • 先缓存后网络:workbox.strategies.StaleWhileRevalidate。

这些类的构造函数皆接收含有以下属性的对象:

  • cacheName:缓存名称,默认值为 Workbox 配置中的运行时缓存名。
  • plugins: 插件数组列表,在获取或缓存请求时会调用它们的生命周期方法以便执行一些额外操作(比如清空过期缓存)。
  • fetchOptions:网络请求配置信息,结构与函数 fetch 中的 init 参数一致(在 CacheOnly 中,该属性将会被忽略)。
  • matchOptions:CacheQueryOptions 对象(在 NetworkOnly 中,该属性将会被忽略)。
  • networkTimeoutSeconds:如果对该属性进行了赋值,那么网络会在指定的时间内没有响应时使用本地缓存来进行响应(该属性仅在 NetworkFirst 中有效)

上文对 Workbox 中常见策略的实现进行了简单介绍,接下来我们来看一下它具体的使用,比如:

workbox.routing.registerRoute(
  '/api/users',
  new workbox.strategies.NetworkFirst({...})
);
@前端进阶之旅: 代码已经复制到剪贴板

上例中,我们使用了上一章介绍的 workbox.routing.registerRoute 方法来拦截请求 /api/users,并通过 workbox.strategies.NetworkFirst 的实例进行响应,结合上一章的学习,我们可以确定上述五个类中必定包含实例方法 handle,故可据此实现自己的请求策略,比如:

class CustomStrategy {
  async handle({ url, event, request, params }) {
    new Response(...);
  }
}

workbox.routing.registerRoute(
  '/api/users',
  new CustomStrategy()
);
@前端进阶之旅: 代码已经复制到剪贴板

除了将请求策略类的实例作为 workbox.routing.registerRoute 方法的 handler 参数外,我们也可以在自定义的 fetch 事件中直接使用,比如:

self.addEventListener('fetch', (event) => {
  const { pathname } = new URL(event.request.url, location);
  if (pathname === '/api/users') {
    const networkFirst = new workbox.strategies.NetworkFirst();
    even
fe
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • React专栏

    • React组合式开发实战

      • 前端开发的四个时代
      • 企业管理系统的前世今生
      • 可视化页面搭建工具
      • 实战篇 01:开发前准备
      • 实战篇 02:项目脚手架
      • 实战篇 03:页面布局方案
      • 实战篇 04:权限管理机制
      • 实战篇 05:菜单匹配逻辑
      • 实战篇 06:消息通知设计
      • 实战篇 07:多语言支持
      • 继往开来:可视化页面搭建工具
    • React Hooks与Immutable实战

    • React SSR服务端渲染与同构实践

    • IM聊天系统前端开发实践

    • 微前端开发实战

    • React进阶实践

  • Vue专栏

  • 移动端专栏

  • Node专栏

  • 前端工程化专栏

  • 算法专栏

  • Typescript专栏

  • 其他专栏