博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPA基础
阅读量:2087 次
发布时间:2019-04-29

本文共 1853 字,大约阅读时间需要 6 分钟。

文章目录

概念

WPA 的英文全称是Progress Wab Apps,翻译为渐进式应用。

来自 appsco.pe 的解释
WAP是传统应用的未来发展方向。webbrowser技术的进步使得创建基于web的应用程序成为可能,这些应用程序模仿并提供与本机(传统)应用程序相同的功能,这意味着应用程序可以像网页一样被创建。
WPA通过web浏览器提供像原生应用一般的强大功能,同时在使用的时候可以不受网络环的影响。它将远程应用的功能引入到了Web。
PWA指向一个清单文件manifest,其中包含网站信息,包含图标、背景屏幕、颜色和默认方向等内容,使用了浏览的 Service Worker 功能,通过 Service Worker,可以使得选择性的缓存部分网站资源,以提供离线访问的体验。

特点

响应式,独立于网络连接,类似于原生应用的交互和体验,始终保持更新,安全,可发现,可重连,可安装,可链接

与传统apps对比

  • 跨平台
    wpa程序运行于浏览器,与平台无关,所以无论桌面、IOS、或安卓都可以兼容
  • 开发简单
    创建wpa应用与创建web网站几乎是一样的,同样是基于html5和jsvascript。
  • 不依赖应用商店
    像web页面一样,pwa程序运行于web浏览器上,这意味着它们不需要通过应用商店即可访问和升级,同时也意味着节省了30%的抽成(App Store)
  • 搜索引擎友好
    不同于原生应用,pwa程序可以被搜索引擎搜索到,更容易被用户来发现和传播。

什么是 Service Worker

WPA功能的关键在于Service Worker。

Service worker是一个注册在指定源和路径下的事件驱动worker。它采用JavaScript控制关联的页面或者网站,拦截并修改访问和资源请求,细粒度地缓存资源。你可以完全控制应用在特定情形(最常见的情形是网络不可用)下的表现。

简单来讲,Service Worker 只是在后台运行的worker脚本,用JavaScript编写,只需要简单几行代码,就可以实现拦截网络请求、处理推送消息并执行其他的任务。对于某些不支持Service Worker的浏览器,WPA会自动降级成普通的网站,一样可以为用户提供服务。

Service worker运行在worker上下文,因此它不能访问DOM。相对于驱动应用的主JavaScript线程,它运行在其他线程中,所以不会造成阻塞。它设计为完全异步,同步API(如XHR和localStorage)不能在service worker中使用。

出于安全考量,Service workers只能由HTTPS承载,毕竟修改网络请求的能力暴露给中间人攻击会非常危险。在浏览器的隐私模式,Service Worker不可用。

下图说明 Service Worker 是如何工作的。

Service Worker 工作方式

Service Worker 的生命周期

Service Worker 的生命周期

从上图看,当用户首次访问网页时候,服务器返回响应网页,

在第一步中,当调用register()函数时候,Servies Worker 开始下载。在注册过程中,浏览器下载、解析并执行 Service Worker(第2部),如果在此步骤出现了任务错误,该 Service Worker将被废弃。

在Sercice Worker被成功执行之后,安装时间将被激活(第3步)。

完成安装之后,Sercice Worker即开始被激活生效,开始控制在其控制范围中的所有事件。

Demo实例

if("serviceWorker" in navigator) {
navigator.serviceWorker.register('./sw.js').then(function(registration){
console.log('ServiceWorker registration successful with scope: ', registration.scope); }).catch(function(err){
console.log('ServiceWorker registration failed: ', err); });}// sw.jsself.addEventListener('install',function(event){
console.log('install event from sw.js.')});

// 结果:

运行结果

转载地址:http://yplqf.baihongyu.com/

你可能感兴趣的文章
直插,快排,堆排,归并排序的分析
查看>>
二叉树的各种操作(面试必备)
查看>>
oracle
查看>>
Struts2中的session、request、respsonse获取方法
查看>>
如何理解MVC模型
查看>>
SpringMVC中乱码解决方案
查看>>
SpringMVC中时间格式转换的解决方案
查看>>
post和get请求相关知识点
查看>>
关于try finally 中的return语句的问题
查看>>
RequestBody/ResponseBody处理Json数据
查看>>
springmvc请求参数获取的几种方法
查看>>
在eclipse中创建和myeclipse一样的包结构
查看>>
Java中的IO流
查看>>
java中的关键字
查看>>
如果某个方法是静态的,它的行为就不具有多态性
查看>>
Java 8系列之重新认识HashMap
查看>>
HashMap 、 ArrayList、String 重写了equals方法 而Object类(比如User)没有重写
查看>>
Servlet的生命周期
查看>>
Object中的getClass()返回的是当前运行的类
查看>>
加载驱动程序的方法
查看>>