PWA笔记

PWA

  • 全称:即渐进式Web应用(Progressive Web App);简称PWA,

  • 概念:PWA运用现代的Web API以及穿透的渐进式增强策略来创建跨平台Web应用程序,

PWA的特点

  • PWA是可被发现:可以通过搜索引擎或支持的应用商店中发现

  • 易安装:可以出现在设备的主屏幕上

  • 可链接:可以简单地通过URL分享

  • 独立于网络:可以在离线状态或是在网速很差的情况下运行

  • 渐进式:在老版本的浏览器仍旧可以使用,在新版本的浏览器上可以使用全部功能

  • 可重用:无论何时有新的内容,都可以发送通知

  • 响应性:在任何具有屏幕和浏览器的设备上都可以正常使用,如:手机,电脑,电视,冰箱,

  • 安全:在用户、应用和服务器之间的连接是安全的,第三方无法访问你的敏感数据

PWA的优势

  • 减少应用安装后的加载时间,可以通过Service Workers来进行缓存,以此来节省宽带和时间

  • 当应用有可用的更新时,可以只更新发生改变的那部分内容,

  • 外观和使用感受与原生平台更加融为一体

  • 凭借系统通知和推送消息与用户保持连接,对用户产生更多的吸引力,并且提高转换效率

PWA的使用

创建基本网站
  • 创建PWA文件夹(文件名随意),在文件内部创建index.html文件,代码如下

  • <!DOCTYPE html>
    <htmllang="en-US"dir="ltr">
    <head>
    <metacharset="UTF-8"/>
    <metaname="viewport"content="width=device-width,initial-scale=1"/>
    <linkrel="shortcut icon"href="" target="_blank">https://c.s-microsoft.com/favicon.ico?v2"/>
    <title>My Sample PWA</title>
    </head>
    <body>
    <h1>My Sample PWA</h1>
    </body>
    </html>

  • 在PWA文件内使用Node.js创建本地web服务器,


  • npx http-server

  • 启动index.html文件查看是否正常启动

生成PWA项目
  • 创建HTPS

  • 使用渐进式Web应用平台的关键是需要使用到HTTPS,当PWA上线时必须要将其发布到HTTPS URL中,在开发阶段可以使用http://localhost:8080来生成PWA

  • 创建Web应用清单

  • 在PWA文件夹下创建manifest.json文件,代码如下


  • {
    //应用的主要语言
    "lang": "en-us",
    //应用名称,
    "name": "My Sample PWA",
    //在空间不足时显示应用名称name
    "short_name": "SamplePWA",

    "description": "A sample PWA for testing purposes",
    //操作系统启动你的应用时应导航到首选URL
    "start_url": "/",
    //应用样式表前启动应用的窗口的背景颜色
    "background_color": "#2f3d58",
    //应用的默认主题颜色,会影响操作系统显示网站
    "theme_color": "#2f3d58",
    //在支持设备上,这将定义应用的模式(如横向或纵向)
    "orientation": "any",
    //应用的外观,
    "display": "standalone",
    //由操作系统在不同上下文中使用的图标图形对象数据
    "icons": [
    {
    //图标
    "src": "/icon512.png",
    //图标大小:注图标的大小要和sizes进行匹配,如不匹配将清单将会进行警告
    "sizes": "512x512"
    }
    ]
    }

  • 打开index.html文件,在<head>标签中增加以下代码


  • <linkrel="manifest"href="/manifest.json">

添加服务工作器
  • 服务工作器是重点,用于开启离线支持、高级缓存、开启后台等等

  • 在PWA文件夹中新增sw.js文件

  • constCACHE_NAME=`my-sample-app-cache-v1`;

    // Use the install event to pre-cache all initial resources.
    self.addEventListener('install', event=> {
    event.waitUntil((async () => {
    constcache=awaitcaches.open(CACHE_NAME);
    cache.addAll(['/']);
    })());
    });

    self.addEventListener('fetch', event=> {
    event.respondWith((async () => {
    constcache=awaitcaches.open(CACHE_NAME);

    try {
    // Try to fetch the resource from the network.
    constfetchResponse=awaitfetch(event.request);

    // Save the resource in the cache.
    cache.put(event.request, fetchResponse.clone());

    // And return it.
    returnfetchResponse;
    } catch (e) {
    // Fetching didn't work get the resource from the cache.
    constcachedResponse=awaitcache.match(event.request);

    // And return it.
    returncachedResponse;
    }
    })());
    });

  • 该sw.js文件将充当PWA服务工作器,会监听页面的事件,

  • 打开index.html文件新增以下代码:引入服务工作器


  • <script>
    if('serviceWorker'innavigator) {
    navigator.serviceWorker.register('/sw.js', { scope: '/' });
    }
    </script>

  • 当以上代码完成后打开浏览器查看辅助角色是否正在运行

浏览器控制台
  • 在Application(应用程序工具)>Service Workers辅助角色处可以查询,如未显示请刷新页面

  • 通过扩展缓存选择my-sample-app-cache-v1来查看服务辅助角色缓存

服务工作器生命周期流程

  • 注册服务工作器

  • 浏览器下载JavaScript文件,安装服务工作线程,并触发install事件

  • install事件中可以预先缓存任何重要和长期文件,如css文件,JavaScript文件,图标,离线页面等


  • self.addEventListener( "install", function( event ){
    console.log( "WORKER: install event in progress." );
    });

  • 服务工作器被激活,触发activate事件


  • self.addEventListener( "activate", event=> {
    console.log('WORKER: activate event in progress.');
    });

  • 当页面刷新或用户转到网站上的新页面时,服务工作线程已准备好运行,如果要在不等待的情况下运行服务工作线程,可使用self.skipWaiting() install


  • self.addEventListener( "install", event=> {
    self.skipWaiting();
    // …
    });

  • 在服务工作线程中的主要事件fetch,每次浏览器尝试访问服务工作器范围内的内容时,都会运行

PWA的劣势

  • 浏览器对技术支持不够全面,不是每一款浏览器都能100%的支持所有的PWA

  • 需要通过第三方库才能调用底层硬件;如摄像头

  • 在ios系统中有50M缓存大小的限制

  • 需要做引到才能让客户将网站快捷方式存储到桌面,有流失率

  • 流畅度取决于网站的优化水平

  • 在国内小程序使用比PWA多,PWA更多的是面向国外

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值