热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单介绍一下ProgressiveWebApp(PWA)

前段时间在公司的内部分享会上简单地介绍了一些关于PWA的技术,不过当时用的是思维导图版本的,现在整理成博客分享给大家ProgressiveWebApp(

前段时间在公司的内部分享会上简单地介绍了一些关于PWA的技术,不过当时用的是思维导图版本的,现在整理成博客分享给大家

Progressive Web App(PWA)

一、前期介绍

1、为什么要将PWA作为本次的技术分享

2017年11月份,谷歌在上海举办了一个开发者大会,期间在很多会场都有关于PWA的介绍,王二认为谷歌在致力于推行这项技术,那么技术上还是很先进的,于是有了如下分享。

2、简单介绍

PWA的中文名叫做渐进式网页应用,早在2014年, W3C 公布过 Service Worker 的相关草案,但是其在生产环境被 Chrome 支持是在 2015 年。因此,如果我们把 PWA 的关键技术之一 Service Worker 的出现作为 PWA 的诞生时间,那就应该是 2015 年。

自 2015 年以来,PWA 相关的技术不断升级优化,在用户体验和用户留存两方面都提供了非常好的解决方案。PWA 可以将 WebApp 各自的优势融合在一起:渐进式、可响应、可离线、实现类似 App 的交互、即时更新、安全、可以被搜索引擎检索、可推送、可安装、可链接。

需要特别说明的是,PWA 不是特指某一项技术,而是应用了多项技术的 Web App。其核心技术包括 App ManifestService WorkerWeb Push,等等。

3、为什么W3C和谷歌在推广这项技术

这就要从前端的现状说起:

Native APP 用起来很流畅,但是也有其天然的基因缺陷:

  • 由于其天生封闭的基因,内容无法被索引
  • 用户 80% 的时间被 Top3 的超级 App 占据,对于站点来说,应用分发的性价比也越来越不划算
  • 要使用它,首先还需要下载几十兆上百着兆的安装包

WEB前端虽然天生具有开放的基因,但是很多时候页面会卡顿,用户体验不佳。虽然社区之前也做过很多努力,例如virtual domspa、混合编程、用canvas将整个页面画出来,用户体验也有了很大的改善,但是仍然无法解决几个重要的问题:

  • 离线时用户无法使用
  • 无法接收消息推送
  • 移动端没有一级入口

W3C和谷歌看到了这些问题,于是推出了PWA

4、PWA的核心目标

PWA的核心目标就是提升 Web App 的性能,改善 Web App 的用户体验。媲美native的流畅体验,将网络之长与应用之长相结合。

二、特点

1、PWA的特点

PWA具有以下一些特点:

这边有一个关于PWA特点的列表清单,有兴趣的同学可以点进去看看.

2、特点详解

(1)、可安装

1、可安装指的是可以像原生APP在主屏幕上留有图标。

2、但是这需要我们提供 Web app manifest,manifest.json 是一个简单的JSON文件,我们在 html 页面如下引用他:

它描述了我们的图标在主屏幕上如何显示,以及图标点击进去的启动页是什么,它的JSON格式如下所示:

其中:

  • start_url 可以设置启动网址
  • icons 会帮我萌设置各个分辨率下页面的图标
  • background_color 会设置背景颜色, Chrome 在网络应用启动后会立即使用此颜色,这一颜色将保留在屏幕上,直至网络应用首次呈现为止。
  • theme_color 会设置主题颜色
  • display 设置启动样式

关于manifest.json里字段更加具体的含义,感兴趣的同学可以参考MDN文档或者谷歌开发者文档里的这篇文章

3、实际上 豆瓣移动端就是一个PWA应用,如果我们用高版本的浏览器打开,就会发现有横幅提示,不过需要注意的是,IOS似乎还不支持,以下王二用安卓手机来做一个演示:

打开豆瓣后,浏览器会提示添加到主屏幕:

点击确定后,他会提示添加成功,然后在主屏幕上留有一个豆瓣的图标。

(2)、离线使用

1、PWA 另一项令人兴奋的特性就是可以离线使用,其背后用到的技术是 Service worker ;

2、Service worker实际上是一段脚本,在后台运行。作为一个独立的线程,运行环境与普通脚本不同,所以不能直接参与 Web 交互行为。Service Worker 的出现是正是为了使得 Web App 也可以做到像 Native App 那样可以离线使用、消息推送的功能。

我们可以把Service worker当做是一种客户端代理,

3、我们来看看如何注册一个 Service Worker

关于Service Worker更加详细的介绍,感兴趣的同学可以参考MDN文档或者Github上的Basic Service Worker Sample这篇介绍。

4、 当然 Service Worker 也有生命周期,参考下图:

关于 Service Worker 生命周期的详细介绍可以参考下面这张图:

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

(3)、消息推送

消息推送具体可以参考谷歌的官方教程Your First Web Push Notification,里面有详细的代码Demo和说明,以及相应的后台配置(带好梯子)。

3、开发者如何了解是否具备这些特点

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

这时候谷歌开发者工具可以帮上我们的忙,在 Chrome浏览器的开发者工具里有一个Audits面板,它可以帮我们检测网页是否具备了PWA的一些特点:

三、有哪些企业已经在使用PWA?

1、国内已经有豆瓣、饿了么使用了部分PWA技术;

2、国外用PWA的企业相对较多,例如Twitter、Filpboard;

3、特别需要注意的是Twitter ,Twitter 在 2017 年上线了 Twitter Lite PWA,其获得了相当惊人的收益:

  • 平均用户停留时长增长 65%
  • Web 站点发推的数量增长 75%
  • 跳出率降低 20%

Twitter Lite 能取得这样的成绩,归功于 PWA 的新技术和用户体验至上的设计原则:它通过 Service Worker 缓存文件,让页面可以离线,同时降低网络消耗;通过 Web Push 接受服务器推送的消息;采用 App Shell 的设计模型,配合 Service Worker 能让页面瞬间展现。

4、另外一些采用了PWA的网站可以参考这个链接

四、代码细节

1、代码可以参考的是谷歌的官方教程

1、Your First Progressive Web App会帮我们了解如何从头构建一个PWA应用。 2、Debugging Service Workers会辅导我们如何调试Service Worker

2、缓存策略

有缓存可以优化用户体验,但是如果没有合理的缓存策略,我们会发现我们的网站将会很难更新。

在用户重新加载新的Service Worker的时候,我们需要将之前旧的资源文件都删掉,如下图所示:

更多的缓存策略有兴趣的同学可以参考这篇文章 -- The offline cookbook

3、官方工具

除了前面提到的手工编写 Service Worker 脚本, Google 提供了 sw-toolboxsw-precache 两个工具方便快速生成 service-worker.js 文件:

  • sw-precache 可以用来生成配置使 PWA 在安装时进行静态资源的缓存
  • sw-toolbox 提供了动态缓存使用的通用策略, 这些动态的资源不合适用 sw-precache 预先缓存。

五、小结

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

参考文章(部分链接需要带好梯子)

谷歌开发者网站关于PWA的搜索结果

Your First Progressive Web App

Exemplary Progressive Web App Checklist

The offline cookbook

Your First Web Push Notification

Debugging Service Workers

PWA网站清单列表

PWA是否能带来新一轮大前端技术洗牌?

PWA 入门: 理解和创建 Service Worker 脚本

web-app-manifest

Basic Service Worker Sample

'ServiceWorker'MDN文档

'ServiceWorker'MDN文档

'Using_Service_Workers'MDN文档

转:https://juejin.im/post/5a6c86e451882573505174e7



推荐阅读
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 微信小程序详解:概念、功能与优势
    微信公众平台近期向200位开发者发送了小程序的内测邀请。许多人对微信小程序的概念还不是很清楚。本文将详细介绍微信小程序的定义、功能及其独特优势。 ... [详细]
  • Win10 周年更新 14393.1737 的详细内容与改进
    尽管今天不是常规的周二补丁日,微软依然发布了 Win10 周年更新 14393.1737 和 Win10 创意者更新 15063.632。本文将详细介绍 Win10 周年更新 14393.1737 的主要更新内容。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • Composer 无法加载本地第三方库?如何解决这一常见问题 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
author-avatar
uigrdg更好_154
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有