Progressive Web Apps入门
PC和Mobile开发技术演进
PC方向,从客户端到富客户端,到现在广泛使用的Web。
移动方向,目前主要还是原生应用和Mobile Web,PWA相关技术是未来发展方向。
PWA的概念
Progressive Web App (中文翻译为:渐进式Web应用)带来的体验将网络应用的优点与原生应用的优点相结合。用户在浏览器中第一次访问时就能体会到它们的好处,因为不需要进行任何安装。在用户随着时间的推移增进与应用的关系后,其功能会变得越来越强大。它即使在不可靠网络上也能快速加载、能够发送相关推送通知、具有桌面图标,并且可采用顶层全屏体验的方式加载。
PWA的特点
- 渐进式 - 适用于选用任何浏览器的所有用户,因为它是以渐进式增强作为核心宗旨来开发的。
- 自适应 - 适合任何机型:桌面设备、移动设备、平板电脑或任何未来设备。
- 连接无关性 - 能够借助于服务工作线程在离线或低质量网络状况下工作。
- 类似应用 - 由于是在 App Shell 模型基础上开发,因此具有应用风格的交互和导航,给用户以应用般的熟悉感。
- 持续更新 - 在服务工作线程更新进程的作用下时刻保持最新状态。
- 安全 - 通过 HTTPS 提供,以防止窥探和确保内容不被篡改。
- 可发现 - W3C 清单和服务工作线程注册作用域能够让搜索引擎找到它们,从而将其识别为“应用”。
- 可再互动 - 通过推送通知之类的功能简化了再互动。
- 可安装 - 用户可免去使用应用商店的麻烦,直接将对其最有用的应用“保留”在主屏幕上。
- 可链接 - 可通过网址轻松分享,无需复杂的安装。
PWA vs Native App
Native App:依赖运行的平台操作系统,比如Android或iOS,需要将应用提交到应用商店,比如Apple App Store或者Google Play Store,国内各大应用商店等。
PWA:不关系平台操作系统,运行在浏览器中,使用标准的Web开发技术,无需提交到应用商店进行审核,发布即用。
PWA vs Web App
Web App:使用标准的Web技术,但是在处理离线,推送上欠缺,不能生成桌面图标等。
PWA:使用标准的Web开发技术,可以支持离线可用,通过service worker进行更新和缓存,采用App shell模型基础开发,界面和交互类似应用。支持推送,未来还支持操作设备(调用摄像头、读取陀螺仪等)。
PWA关键技术
Manifest
网络应用清单是一个 JSON 文件,您(即开发者)可以利用它控制在用户想要看到应用的区域(例如移动设备主屏幕)中如何向用户显示网络应用或网站,指示用户可以启动哪些功能,以及定义其在启动时的外观。网络应用清单提供了将网站书签保存到设备主屏幕的功能。一个PWA的manifest.json示例:
{
"name": "HackerWeb",
"short_name": "HackerWeb",
"start_url": ".",
"display": "standalone",
"background_color": "#fff",
"description": "A simply readable Hacker News app.",
"icons": [{
"src": "images/touch/homescreen48.png",
"sizes": "48x48",
"type": "image/png"
}, {
"src": "images/touch/homescreen72.png",
"sizes": "72x72",
"type": "image/png"
}, {
"src": "images/touch/homescreen96.png",
"sizes": "96x96",
"type": "image/png"
}, {
"src": "images/touch/homescreen144.png",
"sizes": "144x144",
"type": "image/png"
}, {
"src": "images/touch/homescreen168.png",
"sizes": "168x168",
"type": "image/png"
}, {
"src": "images/touch/homescreen192.png",
"sizes": "192x192",
"type": "image/png"
}],
"related_applications": [{
"platform": "web"
}, {
"platform": "play",
"url": "https://play.google.com/store/apps/details?id=cheeaun.hackerweb"
}]}
Service Worker
Service Worker 是一段脚本,与 Web Worker 一样,也是在后台运行。作为一个独立的线程,运行环境与普通脚本不同,所以不能直接参与 Web 交互行为。Native App 可以做到离线使用、消息推送、后台自动更新,Service Worker 的出现是正是为了使得 Web App 也可以具有类似的能力。页面注入service worker代码示例:
if (navigator.serviceWorker) {
navigator.serviceWorker.register('service-worker.js')
.then(function(registration) {
console.log('service worker 注册成功');
}).catch(function (err) {
console.log('servcie worker 注册失败');
});}
Responsive Web Design
RWD是一种网页设计的技术做法,该设计可使网站在不同的设备(从桌面电脑显示器到移动电话或其他移动产品设备)上浏览时对应不同分辨率皆有适合的呈现,减少用户进行缩放、平移和滚动等操作行为。
第4-6点不在这里展开,刚兴趣的可以查找相应资料进行学习。
浏览器对PWA的支持
越来越多的浏览器支持PWA的技术,特别是移动浏览器,比如Chrome,Firefox,UC移动浏览器等。
PWA案例欣赏
国内的有新浪微博Lite版本:https://m.weibo.cn/beta
饿了么移动版:https://h5.ele.me/msite/#pwa=true
国外有Twitter移动版本、Pinterest等产品。随着各大浏览器对PWA技术的支持,未来会出现越来越多的PWA的应用。
参考链接
https://codelabs.developers.google.com/codelabs/your-first-pwapp/#0
https://segmentfault.com/a/1190000008880637
https://zhuanlan.zhihu.com/p/25800461
https://developer.mozilla.org/zh-CN/Apps/Progressive
https://openweb.baidu.com/pwa-future/
https://zhuanlan.zhihu.com/p/25524382
- 通过深度学习实现安全帽佩戴的检测
- python及numpy,pandas易混淆的点
- 深度学习中的损失函数总结以及Center Loss函数笔记
- TF使用例子-LSTM实现序列标注
- 图像学习-验证码识别
- ResNet原理及其在TF-Slim中的实现
- 理工男的文科梦 —— LSTM深度学习写春联
- keras学习笔记-黑白照片自动着色的神经网络-Alpha版
- keras学习笔记-黑白照片自动着色的神经网络-Beta版
- Python 设计模式初探
- 请注意,我们要谈谈神经网络的注意机制和使用方法
- TensorFlow官方教程翻译:导入数据
- TF使用例子-情感分类
- TensorFlow官方教程翻译:TensorFlow调试器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言泊松回归对保险定价建模中的应用:风险敞口作为可能的解释变量
- asp dotnet core 提供大文件下载的测试
- R语言模拟人类生活预期寿命动态可视化动画图gif
- Python遍历字典
- R语言随机森林模型中具有相关特征的变量重要性
- WPF 使用 Direct Manipulation 的方法
- R语言分析负利率下金融市场:负利率和年金价值的变化
- python字典-增、删、改
- C# dotnet 使用判断文件夹存在的方法判断一个文件路径会怎样
- 怎样给wordpress网站模板,添加最新文章、随机文章、热评文章?
- [医疗信息化][DICOM教程]1.使用Java的DICOM基础-理解DICOM文件-DICOM Basics using Java - Making Sense of the DICOM File
- python自动播放网课
- Istio实战——流量管理
- WordPress移除head头部js、css、feed等多余加载项
- python控制鼠标键盘,解放你的双手~