PWA不完全指南

99 阅读3分钟

记录学习过程,如有错误欢迎指出

看到国内的环境,我是感到悲伤的,以前大家都是在浏览器中上网冲浪,现在它们想方设法的把我们留在App中,也许现在我们只有百度问题的时候才会打开浏览器吧(除了前端程序员).我们不能被臃肿的App锁上枷锁,即便现在的设备性能越来越好,容量越来越大,但是这也不是把我们绑架到App上的理由.确实Web现在无法像App一样丝滑,用户体验好.但是我相信总有一天Web也能完成这些任务.(个人感受)

前置知识

这篇文章仅对MDN上的PWA教程进行补充,下面提到的知识不会讲,如果还不会使用的,可以点击后面的链接

App Shell模型

App Shell架构师构建PWA的一种方式,这种应用能够可靠且及时地加载到用户的屏幕上

即离线缓存支持用户界面所需的最小的HTMl,CSS,JavaScript,可确保在用户重复访问时提供及时,可靠的良好性能,意味着用户每次访问时只需要从网络中加载必要的内容

总的来说,就是本机缓存了构建显示网页所需的基础内容,但是并不包含数据

我们应遵守下面规则,以获得最佳性能

  • 快速加载
  • 尽可能使用少的数据
  • 使用本机缓存的静态资源(缓存优先 cache first)
  • 将内容和导航分离
  • 检索和现实特定页面的内容
  • 缓存动态内容(可选)

缓存优先&网络优先

这里我觉得在PWA里面比较重要,重要的是思想不是代码

//一个网络优先的demo
self.addEventListener('fetch',(event)=>{
  //请求对象
  const req = event.resquest;
  //将响应返回给浏览器
  event.respondWith(networkFirst(req))
})


async function networkFirst(req){
  try{ 
    const res = await fetch(req);
    return res
  }catch(e){
    const cache = await caches.open(cache_name)
    //拿着接受的req去缓存库能匹配,匹配到就返回出去
    const cahced = await cache.match(req)
    return cahced 
  }
}
//即所有数据请求都是先请求网络,如果在网络不通的请况下,才使用

我们为什么把网络优先和缓存优先拎出来说呢?是因为前面提到了App Shell模型的规则,即我们要在正确的时间,正确的位置,使用正确的方式(方式指使用缓存优先||网络优先)

因为PWA只能在https或者localhost的请况下使用,那么我们在开发的时候一定是起的本地服务器,访问localhost,重点来了

原因:因为我们在浏览器访问的是localhost,然后缓存了首页的html路径('./xxx/index.html'),这是就导致访问localhost找不到index.htm文件,如果你换成了index.html,那么你测试的时候一定那么为什么chrome显示网络错误😅

不要缓存'./html/index.html',(首页html路径) 而是换成'/',会自动访问首页

记录学习过程,如有错误欢迎指出