浏览器切入移动端问题,Web应用移动化
- 应用程序Web化
- Web应用移动化
- Web操作系统化
- PWA -- Progressive Web Application 渐进式Web应用
- Web应用开发者角度,PWA提供渐进式过度方案,将普通站点过度到Web应用,降低站点改造的代价,让站点逐步支持各种新技术
- 技术层面看,PWA是一种渐进式演化过程,会一点点演进,提供更好设备特性支持,不断优化流畅的动画效果,页面加载速度,本地应用等。
- Web优势: 自由开放,code once ,run anywhere
- PWA: 定义:一套里面逐渐增强Web的优势,通过技术将本地应用和小程序的距离缩短
- Web页面缺少的东西
- Web应用缺少离线使用能力,用户沉浸式的体验在离线或者弱网的情况下没办法体现出来
- Web应用缺乏消息推送的能力
- Web应用缺少一级入口,也就是在桌面端可以打开应用的能力而不是每次用浏览器打开。
- 解决方案:
- 引入service Worker尝试解决离线存储和消息推送的问题
- 通过引入manifest.json解决一级入口问题(安卓基于manifest清单配置)
- WHATWG提出过使用app cache标准缓存页面,但是使用中暴露问题角度,所以标准被废弃
- 2014年标准委员会提出Service Worker的概念,在页面和网络中间增加一个拦截器,用于缓存和拦截请求
- 没安装service worker之前,WebApp通过网络模块进行请求资源,安装之后,WebApp请求资源时,会先通过Service worker,判断返回的是Service worker缓存的资源还是重新去请求资源,控制权在Service Worker手里
- 拦截请求、 缓存资源
- 避免JS占用主线程事件过多的问题,浏览器提供了service worker的功能, 目的让JS运行在主线程之外,但是web worker没有当前页面的DOM环境,只能执行一些与DOM无关的操作,并通过postMessage方法将执行的结果返回主线程,所以Web Worker只是在渲染进程中新开的一个线程,生命周期与页面关联
- Service worker思想与web worker同出一辙,只是Service worker要在web worker的基础上加上存储功能,service worker还得为其他多个页面提供服务,所以不能将其与单个页面绑定在一起,Chrome架构中,Service worker是运行在浏览器进程中的,因为浏览器进程与页面主进程渲染进程不一样,生命周期最长,能为所有页面提供服务
- 消息推送
- 消息推送时浏览器页面未必启动,需要Service worker接收服务器推送的信息,并将消息通过一定方式在端中推送。
- 安全
- HTTP明文传输,如果使用HTTP传输数据肯定是裸奔,所以采用HTTPS,HTTPS密文传输,无法破解数据内容,HTTPS还有校验机制,双方很容易知道数据是否被篡改,所以站点使用Service worker就要升级https
- Service worker需要支持Web页面默认的安全策略
- 渐进式演进将Web技术发挥到极致的同时也渐渐缩短本地应用的差距,PWA Service worker的设计思路同样也是一个亮点
- 添加桌面图标,增加离线缓存,增加消息推送是PWA走向设备的必备功能,但是真正决定PWA的关键还得看底层技术支持,对于页面渲染效率和设备兼容问题,WebAssembly等技术也在渐进式的不断前进。