美文网首页
Service Worker

Service Worker

作者: HelenYin | 来源:发表于2019-04-02 10:56 被阅读0次

    Web Worker

    这个 API 的唯一目的就是解放主线程,Web Worker 是脱离在主线程之外的,将一些复杂的耗时的活交给它干,完成后通过 postMessage 方法告诉主线程,而主线程通过 onMessage 方法得到 Web Worker 的结果反馈。但 Web Worker 是临时的,每次做的事情的结果还不能被持久存下来,如果下次有同样的复杂操作,还得费时间的重新来一遍。

    Service Worker

    在 Web Worker 的基础上加上了持久离线缓存能力。

    Service Worker 功能和特性

    • 一个独立的 worker 线程,独立于当前网页进程,有自己独立的 worker context
    • 一旦被 install,就永远存在,除非被手动 unregister
    • 用到的时候可以直接唤醒,不用的时候自动睡眠
    • 可编程拦截代理请求和返回,缓存文件,缓存的文件可以被网页进程取到(包括网络离线状态)
    • 离线内容开发者可控
    • 能向客户端推送消息
    • 不能直接操作 DOM
    • 必须在 HTTPS 环境下才能工作
    • 异步实现,内部大都是通过 Promise 实现

    Service Worker 生命周期

    在页面脚本中注册 Service Worker 文件所在的 URL。Worker 就可以开始激活了,激活后的 Service Worker 可以监听当前域下的功能性事件,比如资源请求(fetch)、推送通知(push)、后台同步(sync)。在这一系列的流程中,从 Service Worker 的注册到消失,经历了生命周期中不同的状态。

    • 首先我们需要在页面的 JavaScript 主线程中使用 serviceWorkerContainer.register()来注册 Service Worker ,在注册的过程中,浏览器会在后台启动尝试 Service Worker 的安装步骤。
    • 如果注册成功,Service Worker 在 ServiceWorkerGlobalScope 环境中运行; 这是一个特殊的 worker context,与主脚本的运行线程相独立,同时也没有访问 DOM 的能力。
    • 后台开始安装步骤, 通常在安装的过程中需要缓存一些静态资源。如果所有的资源成功缓存则安装成功,如果有任何静态资源缓存失败则安装失败,在这里失败的不要紧,会自动继续安装直到安装成功,如果安装不成功无法进行下一步 — 激活 Service Worker。
    • 开始激活 Service Worker,必须要在 Service Worker 安装成功之后,才能开始激活步骤,当 Service Worker 安装完成后,会接收到一个激活事件(activate event)。激活事件的处理函数中,主要操作是清理旧版本的 Service Worker 脚本中使用资源。
      生命周期分为这么几个状态 安装中 安装后 激活中 激活后 废弃
    Service Worker 所有支持的事件
    • 查看是否注册成功

    chrome://inspect/#service-workers
    chrome://serviceworker-internals

    相关文章

      网友评论

          本文标题:Service Worker

          本文链接:https://www.haomeiwen.com/subject/dcywyqtx.html