zoukankan      html  css  js  c++  java
  • service-worker

     https://kailian.github.io/2017/03/01/service-worker

     http://imweb.io/topic/56592b8a823633e31839fc01

    1、Service Worker的身份

      Service的意思是服务,Worker的意思是工人,那么Service Worker的意思就是服务员。这个员工是2014年6月HTML5新招的实习生,目前在试用中。在此之前,已经有一位老员工,它叫Web Worker。那么问题来了,Boss是谁?Boss就是浏览器。准确来说,每个页面的javascript运行主线程都是一个Boss。

      这里先谈一下大的背景。Boss很厉害,在页面上指点江山,呼风唤雨。但他有个局限:同一时刻只做一件事(单线程)。当一些很耗时的杂事让Boss去处理时,在处理的过程中他就无暇顾及其它重要的事了。在用户看来,页面没人管了,Boss不干事了!这时Boss就很郁闷。为了保证Boss能处理更重要的事情,董事会(W3C)终于招聘了一个新员工:Web worker。这下,Boss终于可以从耗时的杂事中解放出来了,他只需要把Web worker叫过来说:“这些事情拿去做,没做完不要来找我”。Web worker领到任务后默默地到自己的工位(线程)去干活,完成之后给Boss发了个邮件(postMessage)。Boss收到邮件(onmessage)后欣慰地点了点头。

      扯了半天好像还没谈到新员工啊。。。不急,下面就讲到了。

      Boss下班了(页面关闭),Web worker也收拾东西回家了。这样执行了很久,直至2014年6月,董事会发现一个问题:“居然没有人在老板下班后加班?”。于是,又招了一个专职加班的:Service Worker。它被赋予的绩效目标如下:

    1. 入职(install)后永不下班,而能更新。
    2. 能处理Boss需要的资源(HTTPS请求),以便离线时也能让BOSS取到数据(从cache中)。
    3. 能向客户推送消息(push notifications)
    4. 不允许越权管理Boss的事(DOM ACCESS)

      总地来说,Service worker是独立于页面的一个运行环境,它在页面关闭后仍可以运行。同时,也能对它负责的页面的网络请求进行截取和返回请求(类似于Fiddler)。

    2、webWorker和serviceWorker的区别?

      serviceworker是在webworker基础上实现的,它可认为是使用了webworker技术来处理网络请求、响应等方面的事务。 serviceWorker可以认为是一种改进后的webWorker。webworker做的是多线程,serviceworker则是用webworker做了个与网络请求相关封装,来监听一些网络事件。当然serviceworker也可以来做很多事情,例如离线缓存应用,甚至替代fiddler作为调试工具。 

      Service Worker是继web Worker后又一个新的线程,这个线程比web worker独立得更彻底,可以在页面没有打开的时候就运行。作为一个页面与服务器之间中间层,Service Worker可以捕获它所负责的页面的请求,并返回相应资源,这使离线web应用成为了可能。这也是Service Worker被提出的一个重要目的。

  • 相关阅读:
    css
    AcWing 145 超市 (贪心)
    AcWing 144 最长异或值路径 (Trie)
    AcWing 143 最大异或对 (Trie)
    AcWing 142 前缀统计 (Trie)
    AcWing 141 周期 (KMP)
    AcWing 139 回文子串的最大长度 (哈希+二分 / Manacher)
    AcWing 136 邻值查找 (set)
    AcWing 133 蚯蚓 (队列)
    AcWing 131 直方图中最大的矩形 (单调栈)
  • 原文地址:https://www.cnblogs.com/lulin1/p/9528324.html
Copyright © 2011-2022 走看看