PWA之Service work

原文

  简书原文:https://www.jianshu.com/p/84a4553d81a8

大纲

  1、Service Workers: PWA 的关键
  2、理解 Service Workers
  3、Service Worker 生命周期
  4、Service Worker 基础示例

1、Service Workers: PWA 的关键

  正如我之前所提到的,释放 PWA 力量的关键在于 Service Workers 。就其核心来说,Service Workers 只是后台运行的 worker 脚本。它们是用 JavaScript 编写的,只需短短几行代码,它们便可使开发者能够拦截网络请求,处理推送消息并执行许多其他任务。
  最棒的一点是,如果用户的浏览器不支持 Service Workers 的话,它们只是简单地回退,你的网站还作为普通的网站。正是由于这一点,它们被描述为“完美的渐进增强”。渐进增强术语是指你可以先创建能在任何地方运行的体验,然后为支持更高级功能的设备增强体验。

2、理解 Service Workers

  “将你的网络请求想象成飞机起飞。Service Worker 是路由请求的空中交通管制员。它可以通过网络加载,或甚至通过缓存加载。
  作为“空中交通管制员”,Service Workers 可以让你全权控制网站发起的每一个请求,这为许多不同的使用场景开辟了可能性。空中交通管制员可能将飞机重定向到另一个机场,甚至延迟降落,Service Worker 的行为方式也是如此,它可以重定向你的请求,甚至彻底停止。
  虽然 Service Workers 是用 JavaScript 编写的,但需要明白它们与你的标准 JavaScript 文件略有不同,这一点很重要。Service Worker:
  运行在它自己的全局脚本上下文中
  不绑定到具体的网页
  无法修改网页中的元素,因为它无法访问 DOM
  只能使用 HTTPS

  Service Worker 运行在 worker 上下文中,这意味着它无法访问 DOM,它与应用的主要 JavaScript 运行在不同的线程上,所以它不会被阻塞。它们被设计成是完全异步的,因此你无法使用诸如同步 XHR 和 localStorage 之类的功能。
  在上面的图中,你可以看到 Service Worker 处于不同的线程,并且可以拦截网络请求。记住,Service Worker 就像是“空中交通管制员”,它可以让你全权控制网站中所有进出的网络请求。这种能力使它们极其强大,并允许你来决定如何响应请求。

3、Service Worker 生命周期

  当用户首次导航至 URL 时,服务器会返回响应的网页。在下图中,你可以看到在第1步中,当你调用 register() 函数时, Service Worker 开始下载。在注册过程中,浏览器会下载、解析并执行 Service Worker (第2步)。如果在此步骤中出现任何错误,register() 返回的 promise 都会执行 reject 操作,并且 Service Worker 会被废弃。
  一旦 Service Worker 成功执行了,install 事件就会激活 (第3步)。Service Workers 很棒的一点就是它们是基于事件的,这意味着你可以进入这些事件中的任意一个。我们将在本书的第3章中使用这些不同的事件来实现超快速缓存技术。
  一旦安装这步完成,Service Worker 便会激活 (第4步) 并控制在其范围内的一切。如果生命周期中的所有事件都成功了,Service Worker 便已准备就绪,随时可以使用了!

  对我个人而言,我觉得记住 Service Worker 生命周期最简单的方法就是把它当成一组交通信号灯。在注册过程中,Service Worker 处于红灯状态,因为它还需要下载和解析。接下来,它处于黄灯状态,因为它正在执行,还没有完全准备好。如果上述所有步骤都成功了,你的 Service Worker 在将处于绿灯状态,随时可以使用。
  需要注意的是,当第一次加载页面时,Service Worker 还没有激活,所以它不会处理任何请求。只有当它安装和激活后,才能控制在其范围内的一切。这意味着,只有你刷新页面或者导航到另一个页面,Service Worker 内的逻辑才会启动。

4、Service Worker 基础示例

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
    <meta charset="UTF-8">
    <title>github-page</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <meta name="format-detection" content="telephone=no">
    <meta name="msapplication-tap-highlight" content="no">
    <!-- un-comment this code to enable service worker -->
    <script>
        if (‘serviceWorker‘ in navigator) {
          navigator.serviceWorker.register(‘service-worker.js‘).then(function(registration) {
          // 注册成功
          console.log(‘ServiceWorker registration successful with scope: ‘, registration.scope);
        }).catch(function(err) {
          // 注册失败 :(
          console.log(‘ServiceWorker registration failed: ‘, err);
        });
      }
    </script>
</head>
<body>
  <h3>sdfsdfsdfdsf</h3>
</body>
</html>

  

原文地址:https://www.cnblogs.com/shcrk/p/9308025.html

时间: 2024-08-02 07:10:56

PWA之Service work的相关文章

PWA之 Service worker

渐进式 Web 应用(Progressive Web Apps,也被称为 PWAs)是 Web 技术方面一项令人兴奋的创新.PWA 混合了多项技术,能够让 Web 应用的功能类似于原生移动应用.它为开发人员和用户带来的收益能够突破纯 Web 解决方案和纯原生解决方案的限制: 你只需要一个按照开放.标准 W3C Web 技术开发的应用,不需要开发单独的原生代码库: 用户在安装之前就能发现并尝试你的应用: 没有必要使用 AppStore,无需遵循复杂的规则或支付费用.应用程序会自动更新,无需用户交互

[PWA] 2. Service worker life cycle

Once serive worker is registered, the first time we go to the app, we cannot see the logs from servcie works. Any only refersh it second time, then we able to see the logs. Once we change service worker, it doesn't seem that we have change it. The No

workbox-webpack-plugin创建pwa

PWA(Progressive Web Apps)是谷歌近几年一直在推进的 web 应用新模型.PWA 借助 Service Worker 缓存网站的静态资源,甚至是网络请求,使网站在离线时也能访问.并且我们能够为网站指定一个图标添加在手机桌面,实现点击桌面图标即可访问网站. Web App Manifest Web App Manifest 是一个 JSON 文件,它用来定义网站添加到桌面的图标以及从桌面图标进入网站时的一系列行为,如:启动样式,全屏主题等. 先创建 manifest.json

【转】HTTP学习---Web 缓存

[原文]https://www.toutiao.com/i6592743068623962632/ 1. 前端缓存概述 前端缓存主要是分为HTTP缓存和浏览器缓存.其中HTTP缓存是在HTTP请求传输时用到的缓存,主要在服务器代码上设置:而浏览器缓存则主要由前端开发在前端js上进行设置.下面会分别具体描述. 2. 前端缓存分类 2.1 HTTP缓存 整体流程 HTTP缓存都是从第二次请求开始的. 第一次请求资源时,服务器返回资源,并在respone header头中回传资源的缓存参数:第二次请求

【文章学习】监控网页卡顿、崩溃

[学习文章] 1.如何监控网页的卡顿:https://zhuanlan.zhihu.com/p/39292837 2.如何监控网页的崩溃:https://zhuanlan.zhihu.com/p/40273861 知识延展.补充: 1.PWA (Google Progressive Web App)概念 渐进式网页应用.一个利用现代浏览器的能力来达到类似APP的用户体验的技术,由Google实现,让浏览器打开的网址像APP一样运行在手机上.让Web App和Native App之间的差距更小.

[PWA] 1. Intro to Service worker

Service worker stays between our browser and noetwork requests. It can help to fetch data from cache and cache the data from Internet. To get our service worker, we need to : Register the service worker. Service worker in our code is just a javascirp

说说 PWA 和微信小程序--Progressive Web App

作者:云图图链接:https://zhuanlan.zhihu.com/p/22578965来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 利益相关:微信小用户,谷歌小员工 微信发布了微信小程序,虽然还在内测阶段,但是无论从技术上,还是以后要不要开发原生应用(native app)上引发了不少讨论.其实看到微信小程序的消息, 我第一时间想到的是 Google 之前推出的PWA(Progressive Web App),两者的目的是类似的(伪原生应用),但是形式却又

sharepoint 2016 开启Project 2016 pwa网站

sharepoint 2016开启project service正常 进入project service无法看到添加pwa按钮: 采用powershell创建project网站集,具体步骤如下 1.输入License Enable-ProjectServerLicense –Key "23CB6-N4X8Q-WWD7M-6FHCW-9TPVP" 2.创建网站集 New-SPContentDatabase  -WebApplication  http://sp2016-1/ sp2016

借助Service Worker和cacheStorage缓存及离线开发 (转载)

一.缓存和离线开发 说得HTML5离线开发,我们通常第一反应是使用html5 manifest缓存技术,此技术已经出现很多年了,我以前多次了解过,也见过一些实践案例,但是却从未在博客中介绍过,因为并不看好. 为什么不看好呢?用一句话解释就是“投入产出比有些低”. 对于web应用,掉线不能使用是理所当然的,绝不会有哪个开发人员会因为网页在没网的时候打不开被测试MM提bug,或者被用户投诉,所以,我们的web页面不支持离线完全不会有什么影响.但如果我们希望支持离线,会发现,我投入的精力和成本啊还真不