[翻译]Service Worker的配置

原文

前期准备

如下的基础知识:

src/ngsw-config.json的配置文件定义了 Angular service worker需要缓存哪些文件和数据并应该如何去更新它们。CLI在ng build --prod期间处理配置文件。手动,您可以使用ngsw-config工具处理它:

ngsw-config dist src/ngsw-config.json /base/href

配置文件使用json格式。所有文件的路劲必须以/开头,这表示在部署根目录内(在cli的项目中一般指dist)。

路径格式使用一般的国际格式:

  • ** 匹配0 或多个路径.
  • *匹配一个路径或文件.
  • ! 前缀表示相反,即不包括后面的文件

例子路径:

1. /**/*.html 表示所有html文件
2. /*.html 仅表示跟路径的html文件
3. !/**/*.map 不包括所有的sourcemaps文件

下面将说明每一小个定义项

appData

这是给你传递用来描述该版本app的数据。SwUpdate 服务会将其包括在更新通知中。许多app在提示用户有新更新的页面中使用此数据提供额外的信息。

index

这是定义初入口的页面,通常这就是/index.html

assetGroups

这是与app一同更新的资源集合。可包括基础脚本、从CDNs加载的第三方脚本及其它url资源。因为构建过程中不可能知道所有的的额外url资源,所以只要是URL 格式的就能匹配。

这部分包括一个资源对象数组,每一个包括一系列资源和如何缓存的规则

{
  "assetGroups": [{
    ...
  }, {
    ...
  }]
}

每一个子对象定义了一组资源表及如何管理的规则。这规则觉得资源如何被获取和在发现新更新后如何被处理

定义对象的Typescript借口如下:

interface AssetGroup {
  name: string;
  installMode?: 'prefetch' | 'lazy';
  updateMode?: 'prefetch' | 'lazy';
  resources: {
    files?: string[];
    versionedFiles?: string[];
    urls?: string[];
  };
}
name

name是必要。它被用来识别特定的资源组

installMode

installMode 决定了这些资源在初始化时如何缓存,有2种:

  • prefetch告诉Angular service worker在缓存当前版本的应用程序的同时获取每个列出的资源。这是带宽密集型的,但确保了资源在请求时可用,即使浏览器当前处于脱机状态。
  • lazy 不预先缓存任何资源。相反,Angular service worker只缓存它收到请求的资源。这是一个按需缓存模式。永远不会被请求的资源不会被缓存。这对于如有不同分辨率的图像是很有用的,所以service worker只会缓存对应符合当前窗口的图像。
updateMode

对于那些缓存已有的资源,updateMode决定当发现app新版时的缓存行为。根据updateMode更新自上一版本以来组中的被更改的所有资源。

  • prefetch 告诉service worker马上下载并缓存被修改的资源。
  • lazy installMode is also lazy.告诉service worker不要缓存这些被修改的资源。取代的是,它把这些资源当做未请求资源,只会在资源被再请求时更新他们。此模式只会在installMode 也是lazy时有效。
resources

这区域描述被缓存的资源,分别三块。

  • files 列出需要包括文件的路径,可以是如上的国际规则
  • versionedFiles 这也是文件列,但只要是那些用于构建的名字里有hash码的文件,这是用来消除缓存的。 如果Angular service worker能假设某些文件内容是不变的,它就能部分自我优化。
  • urls包括那些将在运行中匹配的资源url规则。这些资源不是直接获取并且不带有内容hash码,但是它们将安装其HTTP headers去缓存。这是对于如Google Fonts service等的CDNs是十分有用的。

dataGroups

不想资源组,数据请求不是跟随着app的版本的而改变的。它们根据手动配置的规则进行缓存,这些规则对于API请求和其他数据依赖等情况更为有用。

Data groups 的Typescript 接口如下:

export interface DataGroup {
  name: string;
  urls: string[];
  version?: number;
  cacheConfig: {
    maxSize: number;
    maxAge: string;
    timeout?: string;
    strategy?: 'freshness' | 'performance';
  };
}
name

类似assetGroups, 就是一个唯一标识码。

urls

url规则列. 符合的url资源就会安照下面的规则去缓存。

version

有时API会以不向后兼容的方式更改格式。新版本的应用程序可能与旧API格式不兼容,因此可能与该API中现有的缓存资源不兼容

version 提供了一种机制来指示被缓存的资源已经以向后不兼容的方式被更新,并且旧的缓存条目(来自以前版本的条目)应该被丢弃。

version 是整数类型,默认为0.

cacheConfig

这部分定义符合的请求如何去缓存。

maxSize

(必须) 缓存中的条目或响应的最大容量。开放式缓存可以无限制地增长,最终超过存储配额,要求清除缓存。

maxAge

(必须) 表示回复可在缓存内最大时间,超过则被认为无效并被清除。maxAge 是一个时长字符串,可用下面的单位:

  • d: days
  • h: hours
  • m: minutes
  • s: seconds
  • u: milliseconds

例如, 字符串3d12h 将缓存内容3.5天。

timeout

这时长字符串定义请求的最长时间。如果定义了,Angular service worker向网络作的请求不会超过此时长,超过后,则会直接使用缓存去回复app。

strategy

Angular service worker有两种数据缓存策略。

  • performance,默认值。优化响应,使其尽可能快。如果缓存中存在资源,则使用缓存版本。这允许一些过时,取决于maxAge,以换取更好的性能。这适用于不经常改变的资源;例如,用户头像图像。
  • freshness
    优化数据的货币,优先从网络获取请求的数据。只有当网络超时,根据超时设定,请求才回落到缓存。这对经常变化的资源是有用的;例如账户余额

你们的赞赏是我的无限动力

如果觉得文章对你有点用的话,麻烦拿出手机,这里有一个你我都有的小福利(每天一次): 打开支付宝首页搜索“8601304”,即可领红包。谢谢支持

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355