老虎证券web端PWA实践总结

2023-05-16

历时两个月,PWA功能终于在web端稳定落地使用,网站 web.itiger.com。

从最新研究到落地上线,遇到不少坑;开发过程中也参考了不少资料,但总有那么几个是没有答案,需要自己摸索结果的。所以,写了这篇总结文章,也阐述一下我在开发过程中遇到的问题,以及解决办法。

  1. 开发环境:vue+webpack,因为项目需要,vue版本v2.5.8,webpack版本v3.8.1

  1. Manifest.json配置

Manifest.json文件配置的属性是根据manifest的API完成的,其中稍作修改的有两处。改动的原因:webpack打包后的static文件路径(https://static.itiger.com)和真正的访问路径(https://web.itiger.com)是在两个不同的二级域名下,属于跨域,所以对manifest的icon和引入路径稍加配置。


(from: web.itiger.com )

1). icon的src属性配置

因为将Manifest.json文件放在static下,加上webpack的配置原因,icon图片的路劲会稍有不同,为了避免错误和麻烦,直接将图片转成了base64编码,也可以省去向服务器请求icon图片的时间,不占用带宽(如果图片较小,带宽的影响是可以忽略的)。

2). webpack打包后,manifest.json引入路径

Manifest.json是在index.html内用link标签引入的,如下所示:

<link rel="manifest" href="/manifest.json?<%=Date.now() %>">

(后面的参数:用打包时间做版本号识别)

但是manifest.json是放在/static文件夹下,经过webpack打包,正常来说也会在/dist/static文件夹下,但考虑上述提到的跨域问题,需要通过webpack(var CopyWebpackPlugin = require('copy-webpack-plugin'))引用依赖进行配置,将manifest.json文件打包到/dist目录下,便于访问。

plugins: [

new CopyWebpackPlugin([

from: resolve('static/manifest.json'),

to: resolve('dist/manifest.json')

}

])

]

  1. Service worker配置

Service worker 的安装注册,是跟所有教程一样的,不做赘述。可以在这里进行查阅。

在本项目中,静态缓存借用了workbox-webpack-plugins,service worker.js内有手写部分,所以没有采用workbox 的GenerateSW()方法自动生成,而是用的InjectManifest(),对已有的sw.js文件进行编辑。

因为workbox是存放在google的cdn上,考虑到客户翻墙问题,就把workbox下载并传到了tiger cdn上,所以,这边涉及到workbox的import问题:

如果是从google的cdn引入,则webpack配置时importWorkboxFrom : cdn;

如果是从项目本地引入,则importWorkboxFrom : local;

如果是从其他地方(如tiger cdn)引入,则importWorkboxFrom : disabled,并且在service worker.js文件内手动配置 importscript( ) 以及 workbox.core.setCacheNameDetails( ) 属性。

一开始,是考虑将workbox安装包放在项目内,但安装包不小,所以放弃了这种方法改用放在tiger cdn上。但是刚开始的配置是importWorkboxFrom : cdn,所以导致service worker.js文件中出现两个workbox的引入路径,造成引入失败;最终将importWorkboxFrom设置成disabled就解决了。

  1. IndexedDB和Cache Storage缓存清理

1). Cache storage实时更新数据时清除旧缓存

Cachestorage 中会有三个缓存,其中预缓存内容存放在***-precache内


在进行静态资源缓存时,缓存策略总会有选择staleWhileRevalidate()的时候,此时的请求结果缓存在***-runtime内,但会带来一个缓存问题。

用staleWhileRevalidate( )属性所配置的静态文件,会从cache storage访问,同时从network进行请求获得最新的数据并更新cache的内容


(from: developers.google.com/web/fundame…)

Runtime-cache的内容永远保持最新,但是之前的就缓存也没有被删除,会导致本地缓存量一直增加。

解决办法:每次service worker被激活时('activate',如刷新页面),新得到的请求结果在就缓存被删除后(waitUntil( ))再保存

this.addEventListener('activate', function(event) {

var cacheWhitelist = [workbox.core.cacheNames.runtime];

event.waitUntil(

caches.keys().then(function(keyList) {

return Promise.all(keyList.map(function(key) {

if (cacheWhitelist.indexOf(key) >= 0) {

return caches.delete(key);

}

}))

})

)

})

2). 清除缓存

当indexedDB和cache storage全部清空时,service worker.js 执行也不再有意义,所以要将service worker卸载,并重新改下载注册。

if (window.navigator && navigator.serviceWorker) {

navigator.serviceWorker.getRegistrations()

.then(registrations => {

for (let registration of registrations) {

registration.unregister()

}

})

}

卸载之后再清空indexedDB和cache storage

indexedDB.deleteDatabase('indexedDB的名称')

caches.keys().then((keyList) => {

if (!keyList.length) return

keyList.map((item) => {

caches.delete(item)

})

})

以上是该项目在落地PWA时遇到的一些坑和大家分享,有什么问题的欢迎指正。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

老虎证券web端PWA实践总结 的相关文章

  • matlab练习程序(演化策略ES)

    还是这本书上的内容 xff0c 不过我看演化计算这一章是倒着看的 xff0c 这里练习的算法正好和书中介绍的顺序是相反的 演化策略是最古老的的演化算法之一 xff0c 和上一篇DE算法类似 xff0c 都是基于种群的随机演化产生最优解的算法
  • 火狐浏览器无法打开

    解决火狐浏览器无法打开的问题 xff1a 第一种方法 请先检查一下任务管理器中有没有火狐的进程 xff08 firefox exe xff09 xff0c 有的话 xff0c 请在任务管理器中强行关闭它 xff0c 然后试试用safe mo
  • 快上车项目简介(500字)

    第8组 快上车 xff0c 这是一款日常生活中非常有趣的安卓手机软件 xff0c 致力于打造一个大学生的专属娱乐创意社区 xff0c 讨论的话题轻松休闲贴近大学生活 xff0c 与在社会中十分流行的贴吧 xff0c 糗事百科类似 在快上车中
  • 挂载硬盘,提示 mount: unknown filesystem type 'LVM2_member'的解决方案

    问题现象 xff1a 由于重装linux xff0c 并且加了固态硬盘 xff0c 直接将系统装在固态硬盘中 启动服务器的时候 xff0c 便看不到原来机械硬盘的挂载目录了 xff0c 不知如何访问机械硬盘了 直接用命令 mount dev
  • 对目前市面上WPF书的浅薄感受

    目前市面上 WPF的书籍 xff0c WPF揭秘 人民邮电出版社 深入解析 WPF编程 电子工业出版社 xff0c WPF程序设计指南 电子工业出版社 WPF高级编程 清华大学出版社 我购买了前面三本 xff0c 简单的对前面三本说一些浅薄
  • 麒麟操作系统配置web服务器,银河麒麟服务器设置

    银河麒麟服务器设置 内容精选 换一换 鲲鹏软件栈汇聚各种鲲鹏兼容软件 xff0c 帮助开发者了解如何将软件移植到鲲鹏上运行 xff0c 获取操作指导和工具 来自 xff1a 其他 对于业务量访问较大的业务 xff0c 可以通过ELB设置相应
  • 技术岗的职业规划_剪辑师该如何做好职业规划?

    各位点进来的小伙伴 xff0c 我猜你们在22 28岁之间吧 这是我们人生中最迷茫最不知所措的年龄段 刚大学毕业发现学的专业跟实际工作起来相差甚远 xff0c 茫然失措 工作几年后 xff0c 猛然发现每日的工作内容都差不多 xff0c 毫
  • debian11的PVE应用

    1 在debian11中安装pve7之后 xff0c 新建虚拟机安装openeuler 启动时报错 xff1a TASK ERROR start failed QEMU exited with code 1 可以把这一段 39 kvm ig
  • cvc 降噪_你买的“降噪”耳机真的是你想要的降噪吗?

    降噪 这一个高大上得词 xff0c 在你们眼中是不是非常的有效 xff0c 面对公共交通工具热播剧外放 xff0c 街道上车水马龙的轰鸣 xff0c 咖啡厅孩子们的喧嚣 xff0c 噪音其实一直都在我们的身边 xff0c 无处不在 xff0
  • ajax post请求怎么传参_高级前端:详解手写原生Ajax的实现

    点击上方 前端印象 xff0c 选择 设为星标 第一时间关注技术干货 xff01 对于Ajax xff0c 肯定很多小伙伴都听过甚至用过了 xff0c 那么没听过的也不用着急 xff0c 本文会对Ajax进行讲解 xff0c 其次 xff0
  • java版如何使区块常加载_Minecraft指令手册

    众所周知 xff0c 人是一种健忘的生物 所以作者忘记了Java版的常加载指令 幸亏一位书友留的言提醒了我 xff0c 不然Java版的各位就只能去网上查了 然后查到 xff0c 头上却起了大雾 滑稽 那么进入正题 xff1a Java版的
  • linux点歌机硬盘,自己动手给KTV点歌机换大硬盘

    某宝买的硬盘KTV点歌机 xff0c 当时买的是单主机没要触摸屏一体的 xff0c 所以硬盘容量最大只有1TB的 原来内置的歌曲 已经挺多的了 xff0c 剩余空间所剩无几 刚好有一块闲置的2TB硬盘就打算把它换上 可以看到剩余空间只有26
  • 云服务器 信息安全,云服务器的信息安全

    云服务器的信息安全 内容精选 换一换 北京时间1月3日 xff0c Intel处理器芯片被曝出存在严重的Meltdown和Spectre安全漏洞 xff0c 漏洞详情如下 xff1a 漏洞名称 xff1a Intel处理器存在严重芯片级漏洞
  • 千方百剂显示服务器错误,千方百剂远程服务器地址

    千方百剂远程服务器地址 内容精选 换一换 已成功登录Java性能分析 待安装Guardian的服务器已开启sshd 待安装Guardian的服务器已安装JRE xff0c JRE版本要求为Huawei JDK 8或者Open JDK 8 1
  • 天地伟业客户端服务器维护,天地伟业监控维保常见问题总结

    天地伟业监控维保常见问题总结 一 天地伟业监控维保监控报警种类不当 xff1a 天地伟业监控维保问题的描述 xff1a 智能监控技术有待发展 xff0c 一些警情尚难以有效研判准确报警 部分企业误导用户 xff0c 过度承诺 如 打架斗殴
  • mac时间机器文件服务器,Mac小技巧:时间机器的使用方法和细节

    时间机器是MacBook Pro上一个备份系统的内置软件 xff0c 这款软件对于大多数工作者来说绝对是一款神器 xff0c 能够让我们无限的找回到以前的Mac备份文件 xff0c 防止一不小心删除了重要文件等问题 xff0c 而且使用起来
  • 远程连接linux桌面之XDMCP配置

    使用xdmcp连接远程linux桌面 测试环境 xff1a Centos6 gnome桌面 kdm桌面涉及修改的文件不一样 xff09 确认以下组件被安装 xff1a yum gruopinstall 34 Desktop 34 34 De
  • snapper命令技巧

    在使用Btrfs时 xff0c 会用到snapper命令 xff0c 因为btrfs目前是最新的 xff0c 而且是稳定的文件系统 xff0c 说最新其实在2012年就已经有了 xff0c 但是真正作为默认文件系统来使用 xff0c 应该是
  • 邮件服务器配置+网页邮件收发

    在 之前 的 一 篇 的 博客 写 了 一 些 关 于 邮件 服务器 的 简单 的 配置 xff0c 这 篇 添加 了 在 网页 上 的 邮件 的 收发 和 用户 认证 等 相关 的 内容 好 了 xff0c 不 多 说 了 xff0c 开
  • winxp 连接linux ftp,Linux和XP之间使用FTP互传文件

    Linux和XP之间使用FTP互传文件 发布时间 2007 09 05 00 57 57来源 红联作者 rganizati 今天第一次付诸于行动 xff0c 发现其实很简单 xff0c 跟我们正常的两台Windows XP系统的机器之间使用

随机推荐

  • pandas所占内存释放

    df 61 pd read csv 39 39 要调用循环处理多个文件时 xff0c 内存占用情况严重 xff0c 如果互相之间不需要调用 xff0c 可以直接del df 释放内存
  • sxe客户端linux,Linux-kernel mailing list archive 2002-24,: [PATCH][swsusp] 2.4.19-pre10-ac2

    Florent Chabaud 8323584 1804289383 1024571187 61 19461 Content Type APPLICATION octet stream name 61 34 patch1 gz 34 Con
  • 打开Mac OSX原生的NTFS功能

    转载自 xff1a http www tianwaihome com 2014 07 mac osx ntfs html 打开Mac OSX原生的NTFS功能 很多同学都会为如何在Mac下写入NTFS格式的磁盘而感到困惑 xff0c 因为默
  • linux生成随机复杂密码,用Linux命令行生成随机密码的十种方法

    2011年的时候我写过一篇日志利用pwgen mkpasswd tr自动更改密码 xff0c 今天在51cto上翻译的与其相关的一篇国外文章 xff0c 名字就是本文的标题 当然方法上并不比我之前总结的高明 xff0c 这里也摘抄下具体实现
  • Linux的桌面环境gnome、kde、xfce、lxde 等等使用比较

    如果不是加入了图形界面 xff0c 微软的Windows系列操作系统不会成功地占领计算机桌面这块高地 这种人机交换的图形化界面 xff0c 使得界面更加直观 简易 而且更人性化 xff0c 同时也大大减少了使用者的认知负担 xff0c 普通
  • windows服务器不显示字体,Win10打开Word提示“Word无法显示所请求的字体”怎么办?...

    Win10打开Word提示 Word无法显示所请求的字体 怎么办 xff1f Word是我们最常使用的办公软件 xff0c 然而一位用户在Win10系统下打开Word时出错了 xff0c 系统提示 内存或磁盘空间不足 xff0c Word无
  • 在sublime text3中配置并使用LaTex

    准备工作 Sublime Text3 安装并配置好Package Control xff0c 若没有安装也没关系 xff0c 我已经把常用的插件都放到了我的GitHub xff0c 可以按照说明复制到指定路径即可 MiKTeX 下载并安装
  • Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢

    前言 在我们在爬取手机APP上面的数据的时候 xff0c 都会借助Fidder来爬取 今天就教大家如何爬取手机APP上面的数据 环境配置 1 Fidder的安装和配置 下载Fidder软件地址 xff1a https www telerik
  • linux安装redis教程yum,linux下yum安装redis以及使用

    1 yum install redis 安装redis数据库 2 service redis start Redirecting to bin systemctl start redis service 开启redis服务 方式一 开启re
  • 存储过程:数据的插入和更新

    存储过程的功能非常强大 xff0c 在某种程度上甚至可以替代业务逻辑层 xff0c 接下来就一个小例子来说明 xff0c 用存储过程插入或更新语句 1 数据库表结构 所用数据库为Sql Server2008 2 创建存储过程 xff08 1
  • win10下VS2017配置GSL库

    GSL库 xff1a GNU Scientific Library 1 下载 xff1a 下载Complete package except sources和Sources两个exe文件 2 安装 xff1a 将两个exe安装 xff0c
  • 微信开放平台开发——网页微信扫码登录(OAuth2.0)

    1 OAuth2 0 OAuth xff08 开放授权 xff09 是一个开放标准 xff0c 允许用户让第三方应用访问该用户在某一网站上存储的私密的资源 xff08 如照片 xff0c 视频 xff0c 联系人列表 xff09 xff0c
  • 安全和取证Linux发行版Kali Linux 2018.4 发布

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 公告说 xff0c 欢迎来到2018年的第四个也是最后一个版本 xff0c Kali Linux 2018 4 xff0c 可以立即下载 这个版本将我们的内核升级到4 18
  • 使用Rust + Electron开发跨平台桌面应用 ( 二 )

    前言 在上一篇文章使用Rust 43 Electron开发跨平台桌面应用 一 中 xff0c 我们将Rust 43 Electron结合起来 xff0c 使用Rust编写核心业务逻辑 xff0c 并编译成node库提供给Electron的U
  • linux高级文件系统管理——btrfs

    前几天 xff0c 关于高级文件系统方面也给大家分享过RAID和LVM xff0c 今天给大家分享的这款文件系统可能比这两者更先进 xff0c 可以将其二者合二为一 第一 xff0c 它可以使用磁盘或者分区大小不一样的设备组建RAID xf
  • 字符串 - 字符串排序

    1 字符串排序 对于许多排序应用来说 xff0c 决定顺序的键都是字符串 给定一列字符串 xff0c 需要按一定顺序排列整齐方便后序处理 2 键索引计数法 这个方法名字有点拗口 xff0c 过程有点绕 xff0c 但是每一步其实很简单 举个
  • iOS-高德地图API的定位与搜索功能

    环境 xff1a Xcode10 1 Swift4 2 真机6s xff0c ios11 Demo xff1a https github com cxymq AmapSwift 高德地图API使用 需要 xff08 https lbs am
  • iOS 录音,播放并上传

    1 界面布局 xff0c 以及相关功能 点击中间开始录音 xff0c 点击左上角播放或暂停播放 xff0c 点击右上角移除文件 2 定义相关属性 import 34 SendVoiceController h 34 import impor
  • 【Python基础】request.post()方法

    00 序言 爬取懂che帝的车型信息时 xff0c 没太整明白request post 里面的参数是干什么用的 xff0c 所以写篇学习笔记提醒一下自己 url 61 39 https www dongchedi com motor bra
  • 老虎证券web端PWA实践总结

    历时两个月 xff0c PWA功能终于在web端稳定落地使用 xff0c 网站 web itiger com 从最新研究到落地上线 xff0c 遇到不少坑 xff1b 开发过程中也参考了不少资料 xff0c 但总有那么几个是没有答案 xff