2019前端必会黑科技之PWA

一、背景

从2018年到现在,作为号称下一代web应用模型的PWA,逐渐成为了一个各大前端厂商争先恐后进行涉足,布局的一个新的技术, 其主要的对标物Native app,作为现在最主流的mobile端应用,它的安全,性能,用户体验的确明显领先于其他互联网载体,但是原生App始终有一些缺点,比如

1. 昂贵开发成本

2. 软件上线,版本更新都需要发布到不同的商店,并通过审核

有些APP你可能使用频率特别少,但是你还是不得不去商店中下载庞大安装包,或者可能一段时间不使用以后,随着版本的更新,你也不得不去重新更新并安装

PWA技术的作为web应用,其天生优势能很好的解决以上的问题。

二. 什么是PWA

PWA是Progressive Web App的英文缩写, 翻译过来就是渐进式增强WEB应用, 是Google 在2016年提出的概念,2017年落地的web技术。目的就是在移动端利用提供的标准化框架,在网页应用中实现和原生应用相近的用户体验的渐进式网页应用。

引用官方介绍:


Reliable - Load instantly and never show the downasaur, even in uncertain network conditions.Fast - Respond quickly to user interactions with silky smooth animations and no janky scrolling.Engaging - Feel like a natural app on the device, with an immersive user experience.

即是:

1. 可靠——即时加载,即使在不确定的网络条件下也不会受到影响。
当用户从主屏幕启动时,service work可以立即加载渐进式Web应用程序,完全不受网络环境的影响。service work就像一个客户端代理,它控制缓存以及如何响应资源请求逻辑,通过预缓存关键资源,可以消除对网络的依赖,确保为用户提供即时可靠的体验。

 

可靠

2. 快速
据统计,如果站点加载时间超过 3s,53% 的用户会放弃等待。页面展现之后,用户期望有平滑的体验,过渡动画和快速响应。

 

快速

3. 沉浸式体验—— 感觉就像设备上的原生应用程序,具有沉浸式的用户体验。
渐进式Web应用程序可以安装并在用户的主屏幕上,无需从应用程序商店下载安装。他们提供了一个沉浸式的全屏幕体验,甚至可以重新与用户接触的Web推送通知。

 

沉浸式体验

Web应用程序中,可以通过manifest.json控制应用程序的显示方式和启动方式,指定主屏幕图标、启动应用程序时要加载的页面、屏幕方向,甚至可以指定是否显示浏览器Chrome。
根据官方的介绍,不难看出,pwa的目标直指原生app,那接下来我们就来了解下PWA到底是个怎么样的何方神圣。

三. 核心功能

PWA并不是单指某一项技术,你更可以把它理解成是一种思想和概念,目的就是对标原生app,将Web网站通过一系列的Web技术去优化它,提升其安全性,性能,流畅性,用户体验等各方面指标,最后达到用户就像在用app一样的感觉。

PWA中包含的核心功能及特性如下:

  1. Web App Manifest
  2. Service Worker
  3. Cache API 缓存
  4. Push&Notification 推送与通知
  5. Background Sync 后台同步
  6. 响应式设计

四. PWA如何弥补和原生App的差距

性能差异

PWA使用app Shell架构模型

1. 快速加载
2. 尽可能使用较少的数据
3. 使用本机缓存中的静态资产
4. 将内容与导航分离开来
5. 检索和显示特定页面的内容(HTML、JSON 等)
6. 缓存动态内容 App Shell 可保证 UI 的本地化以及从 API 动态加载内容,但同时不影响网络的可链接性和可检测性。 用户下次访问您的应用时,应用会自动显示最新版本。无需在使用前下载新版本。
为了保证首屏的加载,在内容请求完成之前,可以优先保证 App Shell 的渲染,做到和 Native App 一样的体验,App Shell 是 PWA 界面展现所需的最小资源。

无法离线使用

Service Worker + HTTPS +Cache Api + indexedDB 等一系列web技术实现离线加载和缓存

数据更新

Background Sync 后台同步技术

无法实现推送

Push&Notification 实现推送与通知

无法添加到桌面

通过manifest.json文件配置,使得可以直接添加到手机的桌面上。

天生优势:

1. 无需安装,无需下载,只要你输入网址访问一次,然后将其添加到设备桌面就可以持续使用。
2. 发布不需要提交到app商店审核
3. 更新迭代版本不需要审核,不需要重新发布审核
4. 现有的web网页都能通过改进成为PWA, 能很快的转型,上线,实现业务、获取流量
5. 不需要开发Android和IOS两套不同的版本

劣势:

1. 游览器对技术支持还不够全面, 不是每一款游览器都能100%的支持所有PWA
2. 需要通过第三方库才能调用底层硬件(如摄像头)
3. PWA现在还没那么火,国内一些手机生产上在Android系统上做了手脚,似乎屏蔽了PWA, 但是相信当PWA火起来以后,这个问题就不会是问题

五. PWA的发展趋势

2016年, PWA在google正式落地,基于 Chromium 的浏览器 Chrome 和 Opera 已经完全支持 PWA 了
随着 iOS 11.3 的发布,iOS正式开始支持PWA
Windows Edge 支持PWA

随着越来越多的游览器大厂,相继的对PWA做出了支持和优化,想必PWA的时代即将到来,

交流

接下来,我会分享如何使用
Vue + Vue CLI 3.x + ts + Quasar 来搭建并快速开发一个PWA



作者:偏罗
链接:https://www.jianshu.com/p/098af61bbe04
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tcpdump抓包工具的使用

# Tcpdump抓包工具的使用## 简介tcpdump是linux下最常用的命令行抓包工具,可以在线安装## 安装- sudo apt install tcpdump## 查看网卡- ip addr查看网卡名称## 简单的使用示例- sudo tcpdump -i enp032 抓取指定网卡的数据包,并- sudo tcpdump -i enp03…

Node.js异步库async

async的使用需要安装第三方包 1.串行无关联 async.series 函数依次执行,后面不需要调前面步骤的结果 程序执行时间为所有步骤之和 2.并行无关联 async.paraller 某步出错不影响其他步骤执行 程序执行时间为最长的那个时间 3.串行有关联 async.waterfall 函数依次执行,后面需要…

Java技术栈---语言基础

基础语法 面向对象 接口 容器 异常 泛型 反射 注解 I/O

Mongodb 查询时间类型

$where: this.CreateDate.toJSON().slice(0,13) "2019-04-04T05"转载于:https://www.cnblogs.com/kevin1988/p/10685075.html

vue prop不同数据类型(数组,对象..)设置默认值

vue prop 会接收不同的数据类型,这里列出了 常用的数据类型的设置默认值的写法,其中包含: Number, String, Boolean, Array, Function, Object refAge: { type: Number, default: 0 }, refName: { type: String, default: }, hotDataLoading: { typ…

正则表达式——基础

正则表达式的基本符号使用: 1。基本符号: a . 匹配任意单个字符,如:.000就可以匹配到1000,2000,3000,a000,b000等。 b | 匹配满足其中一个条件,如: 1000|2000|3000 可以…

谈一谈并查集QAQ(上)

最近几日理了理学过的很多oi知识。。。发现不知不觉就有很多的知识忘记了。。。 在聊聊并查集的时候顺便当作巩固吧。。。。 什么是并查集呢? ( Union Find Set ) 是一种用于处理分离集合的抽象数据结构类型。 具体一点: 当我们给出两个元素的一个无序对(a,b&#…

vue的双向绑定原理及实现

前言 使用vue也好有一段时间了,虽然对其双向绑定原理也有了解个大概,但也没好好探究下其原理实现,所以这次特意花了几晚时间查阅资料和阅读相关源码,自己也实现一个简单版vue的双向绑定版本,先上个成果图来吸引各位&a…

python后端将svc文件数据读入数据库具体实现

如何用python将svc文件的数据读入到MySQL数据库里,在此直接上代码了,感兴趣的朋友可以贴代码测试: import pandas as pd import os from sqlalchemy import create_engine # 初始化数据库连接,使用pymysql模块 # MySQL的用户&…

作业——8

这个作业属于哪个课程C语言程序设计Ⅱ这个作业的要求在哪里C语言作业评价标准我在这个课程的目标是指针与字符串这个作业在哪个具体方面帮助我实现目标使用指针与字符串参考文献指针和字符串(基础知识)第七周作业 一 1 、使用函数删除字符串中的字符 输入…

Vue实现组件props双向绑定解决方案

注意: 子组件不能直接修改prop过来的数据,会报错 方案一: 用data对象中创建一个props属性的副本 watch props属性 赋予data副本 来同步组件外对props的修改 watch data副本,emit一个函数 通知到组件外 HelloWorld组件代码如下…

统计词频问题

adict{} xinput().lower() #把单词大写字母改为小写字母 for i in x:if i in [,,.,"",",!]:xx[:x.index(i)]x[x.index(i)1:] #把句子中的非字母字符用切片操作删掉 asetset(x.split( )) #集合的好处在于不重复 alstx.split( ) for n in aset:tempdict{n:alst.…

正则表达式常用函数

<?php //preg_match("正则表达式","字符串")用于在字符串中查找匹配项 $email "987044391qq.com"; if (preg_match("/^([a-zA-Z0-9])([.a-zA-Z0-9_-])*([.a-zA-Z0-9_-])([.a-zA-Z0-9_-])([.a-zA-Z0-9_-])$/",$email)){ echo 匹…

利用js的闭包原理做对象封装及调用方法

创建一个js文件&#xff0c;名为testClosure.js&#xff1a; ? 1 2 3 4 5 6 7 8 9 (function () { function a() { alert(i am a); } outFunc function () { a(); } })(); 这里不论写多少个function,a b c d ...外面都调用不到&#xff0c;包括这里面va…

Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler

一.使用 Flask中的特殊装饰器(中间件)方法常用的有三个 app.before_request # 在请求进入视图函数之前app.after_request # 在请求结束视图函数之后 响应返回客户端之前app.errorhandler(404) # 重定义错误信息before_request def func():passafter_request def func(ret): # …

Flask 中内置的 Session

Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from flask import session app Flask(__name__) app.secret_key "DragonFire" secret_key 实际上是用来加密字符串的,如果…

CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport

最近看了很多这方面的文章&#xff0c;能搜到的基本看了个遍&#xff0c;但感觉还是似懂非懂&#xff0c;知道这个东西&#xff0c;很难说出这是个什么东西&#xff0c;先整理一些概念&#xff0c;慢慢消化&#xff0c;以后慢慢探索其中的原因。 1、PX(CSS pixels) 1.1 定义 …

【转】10条你不可不知的css规则

10条你不可不知的css规则 Posted on 2006-12-20 10:33 雨中太阳 阅读(343) 评论(1) 编辑 收藏 &#xff1a;【译】10条你不可不知的css规则正文&#xff1a; Published December 6th, 2004 in CssStaff Tags: No Tags. 原文地址&#xff1a;Ten CSS Tricks You May not Know k…

Python 面向对象【1】

对象 属性 方法面向对象特征&#xff1a;分装 继承 多态【不同对象对同一方法响应不同行动】类定义class xxx:........类对象类对象支持两种操作&#xff1a;属性引用和实例化 属性引用 使用和 Python 中所有的属性引用一样的标准语法&#xff1a;类对象名.属性名 类对象创建…

【前端面试】HTML5+CSS3初级面试1

最近刚好在看前端的面试&#xff0c;把看到的内容总结一下&#xff0c;方便大家一起学习。 1、简单说一下对HTML5CSS3的了解。 HTML5和CSS3不仅是两项新的Web技术标准&#xff0c;而且代表了下一代HTML和CSS技术。其未来的发展前景已经可以预见&#xff0c;那就是HTML5必将被越…