0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

未来可期之PWA渐进式Web应用

张康康 2019-07-29 18:27 次阅读

作者 | 极链科技Video++前端Team子昂

整理 | 包包

前端技术这几年发展迅速,其中就有PWA,全名Progressive Web APP即渐进式Web应用程序,在2016年,Google I/O 大会上提出的一个 Next Web Generation 概念。PWA是专门应对手机web开发提出来的,它可以将 web 和 app 各自优势结合到一起:渐进式、离线加载等实现趋近于App的交互,实时更新、可推送、可安装等,达到一个当我们使用Web应用时体验可以像一款原生App一样。特别说明一下,很多人以为PWA是一种新技术,然而并不是,它是应用多项Web技术的一个集合,其中核心技术即 “Service Worker”,我们把它放在后面说。

目前我们使用Web应用和很多国内SPA一样,通常都是在打开一个页面的时候发起请求来获取数据,在离线的情况一般就不可用了。而PWA是旨在改善Web的体验,将网络的优势与应用的优势融合起来,给用户更优的体验。PWA具有的特点分别是:

  • 可靠即使在不稳定的网络环境下(包括无网络的情况),也可以立即加载并展现。

  • 响应快速用户交互响应迅速,有平滑流畅的动画进行响应。

  • 粘性像设备上原生应用一样,具有逼真的用户体验,同时用户还可以将其添加到桌面。

  • 渐进式适用于使用任何浏览器的用户,因为它的核心是以渐进式增强。

  • 自适应任何形式上都可使用:桌面设备、移动设备等。

  • 安全通过HTTPS,防止窥探以及保障内容不会被篡改。

  • 可发现因为W3C清单和服务工作注册范围,可以让搜索引擎找到它,将其识别为“应用程序”。

  • 可安装用户再去app store去下载,可以直接将应用添加到主屏幕从而保留进行使用。

  • 可链接可以通过url地址分享应用程序,省去了复杂的安装。

我们在其中选择几点着重解释一下:

(1)可安装

它是指在设备的主屏幕上像原生APP一样留有图标。要实现这特点首先需要提供Web app manifest(web应用程序清单),manifest是一个json文件,它里面描述的是应用程序的图标如何在主屏幕显示以及点击后跳转到的页面是什么,我们可以直接在html中引用它“”,它的格式如下图:

f743d4a91edd4087b2ccae9fbc327f18


其中几个属性代表的意思是:

• start_url 设置跳转的地址

• icons 让我们设置页面的图标

• background_color 设置背景颜色, 应用启动后会立即使用此颜色,这一颜色将保留在屏幕上,直至网络应用首次呈现

• theme_color 会设置主题颜色

• display 设置是否启动状态

这里的display设置的是网络应用是否隐藏浏览器的UI,当display的值为"standalone"时,网络应用隐藏浏览器的UI;当display的值为"browser"时,则显正常显示。


关于manifest.json里字段更加具体的含义,感兴趣的同学可以去谷歌开发者文档里探索一下啦。

(2)这是一个非常diao的特性:可离线使用即在没有网络环境的情况下也能打开应用程序,实现这一强大功能的幕后大佬是:Service worker(服务人员)。

Service worker其实是一段脚本,我们平时缓存都是session、localStorage、CacheStorage这些,PWA通过Service worker访问CacheStorage实现缓存及离线开发。

这里简单讲一下Service worker的概念,通常浏览器加载页面运行的是主JavaScript线程,而Service worker作为一个独立的线程,可以理解为在浏览器身后默默无闻运行的一个线程。

正因为这个特性,Service worker无论如何都不会阻塞我们的主线程,意味着不会使我们的浏览器页面卡顿等。在使用Service worker时要注意,我们使用的协议必须是https,当然如果想在本地开发弄一个https是很让人头疼的,幸运的是Service worker允许在本地hostlocalhost或者127.0.0.1也可以跑起来。

我们来看一下,如何注册Service worker?

首先,我们要判断当前使用的浏览器是否支持Service worker,支持我们才能继续进行下去,如果支持,那么在页面加载的时候注册位于/sw.js的Service worker,看下面的代码:

4e443fe283514610b9d91e33eaa5e2f2


每次页面加载成功后,就会调用 register() 方法,浏览器将会判断 Service Worker 线程是否已注册并做出相应的处理。

register 方法的 scope 参数是可选的,用于指定你想让 Service Worker 控制的内容的子目录。本 demo 中服务工作线程文件位于根网域, 这意味着服务工作线程的作用域将是整个来源。

关于Service Worker更加详细的介绍,感兴趣的同学可以参考MDN文档。

对啦,Service worker也是有生命周期的,它的详细介绍可以参考下图:

fa02542b561142808d8e2540ddba79ac


说了这么多,那我们开发者如何了解一个网页是否具备了 PWA 的一些特点呢?

我们可以通过谷歌开发工具,在其中找到Audits面板,它可以检测出页面是否具备PWA的特点:

c074863701fb45d2bda98d71b17c29a7


下面我们来看一个简单的demo,看一下PWA在离线时依然能够快速加载应用。

首先我们将加载loading直接显示出来,确保用户在打开网页可以立即看到,让用户知道此时页面在加载中:


此时我们将html页面中引用的js的注释取消,将我们写的虚假数据加载出来:


那么如何实现缓存呢?即在离线的环境下加载出来数据,此时将网络环境调成Offline,页面无法加载:

这里就要应用到上面我们说的Service worker服务工作线程来实现。

先来检查一下浏览器是否支持Service worker:

90ab65473d7049e28f0c99a53e21f0e8


如果浏览器支持,就会注册服务工作线程,当用户第一次打开页面时就会触发安装事件从而将缓存所需的内容。

下图为核心代码,实现了真正的离线缓存:

96d411faaa134a55943a637513034477


首先,我们需要通过 caches.open() 打开缓存并提供一个缓存名称。提供缓存名称可让我们对文件进行版本控制,或将数据与 App Shell 分开,以便我们能轻松地更新某个数据,而不会影响其他数据。

我们在install侦听器下面添加activate事件侦听器,因为activate事件会在Service worker启动时触发,图中activate事件里面的代码可以确保文件更改的时候更新缓存

最后我们需要从缓存中提取我们需要的内容,就是下面这段代码:

0fe7d54c60b04209b4bcebc32d44343c


caches.match() 会由内而外对触发抓取事件的网络请求进行评估,并检查以确认它是否位于缓存内。它随即使用已缓存版本作出响应,或者利用 fetch 从网络获取一个副本,response 通过 e.respondWith() 传回至网页。

现在来看一下我们在离线的时候页面是否会加载呢?


如图,在Offline的网络环境下,我们的应用成功加载出来了。

这个小demo就到这里啦!

目前Progressive Web App仍处于初级阶段,国内普及度还不够,但是不可忽视其背后的的技术,以及对前端全新的定位,或许它会像十年前的AJAX那样重新改变前端的生态。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏

    评论

    相关推荐

    嵌入系统的未来趋势有哪些?

    嵌入系统是指将我们的操作系统和功能软件集成于计算机硬件系统之中,形成一个专用的计算机系统。那么嵌入系统的未来趋势有哪些呢? 1. 人工智能与机器学习的整合 随着现代人工智能(AI)和机器学习
    发表于 09-12 15:42

    苹果AI功能被曝将分阶段缓慢推出

    据知名科技记者马克·古尔曼的最新爆料,苹果公司的AI战略正采取分阶段、渐进式的推出方式。他指出,Apple Intelligence目前尚处于发展初期,其初始版本将不可避免地面临功能缺失的局限,尤其是在欧盟市场,初期将无法使用。
    的头像 发表于 09-09 17:19 1117次阅读

    鸿蒙ArkTS声明组件:Web

    提供具有网页显示能力的Web组件,[@ohos.web.webview]提供web控制能力。
    的头像 发表于 07-04 15:35 540次阅读
    鸿蒙ArkTS声明<b class='flag-5'>式</b>组件:<b class='flag-5'>Web</b>

    谷歌Chromebook引入徽标功能,支持网页快速安装PWA应用

    5 月 22 日报道,谷歌于近期的 I / O 2024 大会上发布了“Add to Chromebook”标记。该标记让开发者能够植入相应的 API 代码至其网页中,从而使得ChromeBook用户只需按下按钮即可快速安装各类PWA应用至个人设备。
    的头像 发表于 05-22 11:10 395次阅读

    手机QQ首个基于NT架构的正式版发布

    早在 2020 年,QQ 开发团队便启动了这项重大的架构升级工程。面对业务复杂和代码体积庞大的挑战,他们采取了分阶段、渐进式的策略来推动架构升级。
    的头像 发表于 05-16 16:19 795次阅读

    HarmonyOS开发案例:【Web组件实现抽奖】

    基于ArkTS的声明开发范式的样例,主要介绍了Web组件如何加载本地和云端H5小程序。
    的头像 发表于 05-09 18:31 1296次阅读
    HarmonyOS开发案例:【<b class='flag-5'>Web</b>组件实现抽奖】

    微软将控制面板“字体”功能移至Win11设置

    微软一直以来采用渐进式迁移策略,将控件面板的功能分散至设置,现阶段并无全面消除控件面板之意。Win11 的设置现已具备与控件面板相当的现代字体管理界面,而控件面板内的’字体‘功能仍可通过搜索功能开启(Control Panel》Appearance and Personalization》Fonts)。
    的头像 发表于 04-22 11:37 388次阅读

    边缘Web智能网关是什么?边缘Web智能网关的功能

    边缘Web智能网关是一种新型的物联网设备,主要在物联网(IoT)设备与云计算服务之间建立连接,实现数据的收集、处理和传输。 边缘Web智能网关就是边缘计算网关,通过WEB端进行网关的配置、管理 边缘
    的头像 发表于 04-07 14:42 419次阅读

    一文读懂芯片混合键合工艺流程

    在封装史上,最后一次重大范式转变是从引线键合到倒装芯片。从那时起,更先进的封装形式(例如晶圆级扇出和 TCB)一直是相同核心原理的渐进式改进。
    发表于 02-27 09:24 2978次阅读
    一文读懂芯片混合键合工艺流程

    能理解、能设计!建筑行业AI大模型未来可期

    中经过训练和优化的行业大模型,更专注于某个特定领域的知识和技能。领域专业性更强,输出质量更高,特定任务效果更好。   建筑行业AI 大模型未来可期   在建筑行业中,AI大模型的应用已经越来越广泛。广联达科技股份有限公司副总
    的头像 发表于 01-26 09:04 4145次阅读
    能理解、能设计!建筑行业AI大模型<b class='flag-5'>未来</b><b class='flag-5'>可期</b>

    web前端开发和前端开发的区别

    Web前端开发和前端开发是两个相似但略有不同的概念。本文将详细讨论这两者之间的区别。 定义和范围: Web前端开发是指开发和维护Web应用程序前端部分的过程。Web前端开发通常涉及使用
    的头像 发表于 01-18 09:54 3150次阅读

    鸿蒙开发基础-Web组件cookie操作

    账户中心。 cookie读写操作 首次打开应用时,应用首页的Web组件内呈现的是登录界面。用户完成登录操作后,会跳转至账号中心界面。首页包含“读取cookie”、“设置cookie”和“删除cookie
    发表于 01-14 21:31

    OneLLM:对齐所有模态的框架!

    OneLLM 是第一个在单个模型中集成八种不同模态的MLLM。通过统一的框架和渐进式多模态对齐pipelines,可以很容易地扩展OneLLM以包含更多数据模式。
    的头像 发表于 01-04 11:27 869次阅读
    OneLLM:对齐所有模态的框架!

    什么是PWAPWA离线方案研究分析

    PWA(Progressive Web App)是一种结合了网页和原生应用程序功能的新型应用程序开发方法。PWA 通过使用现代 Web 技术,例如 Service Worker 和
    的头像 发表于 12-19 09:53 767次阅读
    什么是<b class='flag-5'>PWA</b>?<b class='flag-5'>PWA</b>离线方案研究分析

    石墨烯仍是一种年轻的材料

    安德烈·海姆提出了对石墨烯运用前景的展望:未来应该不只是发挥渐进式的提升作用,而是迈入创造革命性变化的阶段。他进一步解释道,在革命性阶段,二维材料和成千上万种维度的材料将会创造以前材料完全无法实现的东西。
    的头像 发表于 12-12 14:07 657次阅读