首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Web性能优化之Worker线程(下)

服务工作线程触发 MessageEvent 事件时会调用指定的事件处理程序 服务脚本「向父上下文发送消息」时触发 也可以使用 navigator.serviceWorker.addEventListener...❝「同一页面」使用「同一 URL」 多次调用该方法会「返回相同的注册对象」:即该操作是「幂等」的 ❞ navigator.serviceWorker.register('....「已安装」的服务工作者线程调用 self.skipWaiting()。...这样可以「立即生效」,而不必等待一次导航事件 「客户端」,这个阶段大致可以通过检查 ServiceWorkerRegistration.active 是否被设置为一个 ServiceWorker 实例来确定...顶级服务脚本和通过 importScripts()服务工作线程内部导入的文件「永远都不会被缓存」 navigator.serviceWorker .register('/serviceWorker.js

2.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

W3C TPAC 大会上的 Service workers 内容总结

立即注销 worker 如前所述,如果你注销 service workers 注册,则会从注册列表中将其删除,但是它将慧继续控制现有页面。这意味着它不会中断正在进行的提取等操作。...但是某些情况下,无论中断什么事情,你都希望 service workers 立即离开。...该模型不是先请求响应——你可以仍然发送请求正文的同时开始接收响应。...当用户处于“在线”状态时,后台同步会为你提供 service worker 事件,该事件可能会立即消失,也可能会在用户离开站点的某个时间出现。...这意味着 await 将继续运行,但是可以脚本“完成”之前调用事件。根据当前定义,不允许执行 + 微任务之后添加事件。

82210

开发一个渐进式Web应用程序(PWA)前都需要了解什么?

Service Worker生命周期 对于Service Worker,基本设置的步骤如下: 首先应注册SW,如果SW已注册,浏览器会根据于安装事件自动开始安装安装SW,它将收到激活事件。...如果SWnavigator 中可用,则在页面加载时立即注册SW。...通过event.waitUntil()方法使用JavaScript promise来知道安装需要多长时间以及是否成功。 安装事件会调用self.skipWaiting()直接激活SW。...Service Worker安装并激活,刷新页面并再次检查网络选项卡。现在,Service Worker将拦截HTTP请求,并从缓存中即时加载相应的资源,而不是向服务器发出网络请求。...获取/传输过程中,你的用户即便关闭标签,乃至关闭整个浏览器,也不会清除传输任务。当用户再次打开浏览器,传输过程将恢复。这个API也可以将传输的进度可以显示给用户,用户可以取消或暂停这个过程。 ?

1.6K20

项目中使用Service Worker 与 PWA

简而言之,worker 线程执行复杂计算,同时保持页面(主线程)的流畅性,不会造成阻塞。 2....2.安装 需要在网页进行注册来安装安装前需要检查是否支持 serviceWorker,如果支持,每次页面加载时就调用 register(),浏览器将会判断是否已注册。...registration failed: ', err); }); }); } 注册成功,install 事件会被触发,将会调用caches.open() 和我们想要的缓存名称, 之后调用...新 Service Worker 取得控制权,将会触发其 activate 事件。...} ] } start_url 可以设置启动网址 icons 会帮我萌设置各个分辨率下页面的图标 background_color 会设置背景颜色, Chrome 在网络应用启动后会立即使用此颜色

31910

Service Worker最佳实践

成功激活便进入空闲等待状态,若当前的Service Worker进/线程一直没有管辖的页面或者事件消息时会自动终止(具体的终止策略视不同浏览器及版本而定,不会影响前端编写逻辑,但前端勿Service...若网络拉取的与本地有一个字节的差异都会触发Service Worker脚本的更新,更新流程与安装类似,只是更新安装成功不会立即进入active状态,需要等待旧版本的Service Worker进/线程终止...图5 最后我们可以通过浏览器中输入chrome://serviceworker-internals来了解当前浏览器中所有已安装Service Worker的详细情况,Installation Status...图6 3、编写serviceworker脚本逻辑;serviceworker是事件驱动型服务线程,所以serviceworker脚本逻辑中基本都是以事件监听作为逻辑入口,示例中serviceworker...(String url)来提前向内核申请更新特定业务的Service Worker(注意这里需要业务已经在内核中安装过Service Worker,切此接口调用一次只会强制更新一次)。

2.3K10

前端性能优化总结

换个说法,构建过程中,webpack通过使用prerender-spa-plugin插件生成静态结构的html // 1、安装prerender-spa-plugin npm install prerender-spa-plugin...ServiceWorker 拥有对缓存流程丰富灵活的控制能力,当页面请求到 ServiceWorker 时,ServiceWorker 同时请求缓存和网络,把缓存的内容直接给用户,而后覆盖缓存 注意:需要...HTTPS才能使用ServiceWorker HTTP缓存 HTTP缓存一般分为两类:强缓存(本地缓存)、协商缓存(304缓存) 普通刷新会启用协商缓存 地址栏输入网址、通过链接引入资源等情况下,浏览器才启用强缓存...async 当脚本下载完立即执行。...(两者执行顺序不确定,执行阶段不确定,可能在 DOMContentLoaded 事件前或者 ) defer和async都不会停止解析dom 「webp」 「webp」 是一种新的图片格式,它的体积只有只有

57930

ServiceWorker工作机制与生命周期:资源缓存与协作通信处理

因此它在被注册安装之后,能够被多个页面中使用,也不会因为页面的关闭而被销毁。 出于对安全问题的考虑,Service Worker 只能被使用在 https 或者本地的 localhost 环境下。...//service worker安装成功开始缓存所需的资源 var CACHE_PREFIX = 'cms-sw-cache'; var CACHE_VERSION = '0.0.20'; var CACHE_NAME...activated 同样的,Service Worker 安装完成后会被激活,所以我们也可监听 activate 事件。...如果是第一次加载sw,安装,会直接进入activated阶段,而如果sw进行更新,情况就会显得复杂一些。流程如下: 首先老的sw为A,新的sw版本为B。...//service worker安装成功开始缓存所需的资源 self.addEventListener('install', function(event) {     //跳过等待过程     self.skipWaiting

1.4K20

Progressive Web Apps

除了Web天生的(便捷)体验外,还有3个特点:Reliable, Fast, Engaging 可靠:不确定的网络环境下,也能立即加载,而不会(因为断网而)瞬间回到远古时代 可靠指的是离线缓存,断网状态走缓存...launcher=true" } P.S.安装banner是指一个类似于获取权限的弹出面板,用户可以选择添加至主屏幕或取消,满足一定条件的话,Chrome会自动弹出安装banner,具体见Web App...但service worker自身也应该看做“增强”项,不支持service worker的环境应该跳过缓存机制保证基本的页面体验,简单的特征检测方案如下: if ('serviceWorker' in...,而是直接进入网络 注销service worker不会清掉缓存,cache key不变的话,之后还会拿到旧的缓存内容 默认新注册的service worker页面重新载入之后才会生效,除非做特殊处理...weather-pwa 不太乐观的消息:事实上,故意精心准备了用户环境(官方正版Chrome + 官方Demo),小米4上没有自动弹出安装banner(可能是操作姿势等条件不满足,见上文),手动点击“

1.1K40

异步JS中的Web Workers

该方法不会给 worker 留下任何完成操作的机会;就是简单的立即停止 result.onclick = () => { worker.terminate(); } } else { console.log...保证同源), 会看到worker.js只加载了一次, 下面分别是 index.html 和 index2.html 的 network 情况, 说明两个同源的页面是共享了同一个线程, 并且启动, 刷新页面也不会重新去初始化...Chrome 中没有默认开放支持) Opera: 访问 opera://flags 并开启 ServiceWorker 的支持; 重启浏览器 2、使用方式 SW的调用可以拆分为以下几个阶段, 也即生命周期...都 Cache 对象, 再使用 Cache 对象的方法去处理缓存, 例如 addAll 会抓取一个 URL 数组,检索并把返回的 response 对象添加到给定的 Cache 对象中 激活 安装完成..., 如果下载的 SW 文件是新的, 安装就会在后台尝试进行, 安装成功不会被激活, 会进入 waiting 阶段, 直到所有已加载的页面不再使用旧的 SW 才会被激活. 4) fetch 还有一个值得监听的重要事件是

1.5K20

Service Worker离线缓存实战

立即添加缓存文件, // 当缓存文件被添加完,才从install -> waiting event.waitUntil( caches.open(VERSION).then...简单来说,分为以下两步: install 阶段,调用 self.skipWaiting() 跳过 waiting 阶段,直接进入 activate 阶段 activate 阶段,调用 self.clients.claim...进入 activate ,还需要取得“控制权”,并且弃用旧代码 sw1。上方的代码顺便清理了旧版本的缓存。 资源拦截 代码的最后,需要监听 fetch 事件,并且进行拦截。...如果命中,返回缓存;如果未命中,放通请求,并且将请求的资源缓存下来。...第 2 次刷新,通过上图可以看到,缓存版本内容已更新到 v2,并且左侧内容区已经被改变。

1.3K10

Service Worker初探

如果我们的页面多个窗口中打开,Service Worker不会重复创建。 就算浏览器关闭之后,Service worker也同样运行。...如果我们的页面多个窗口中打开,Service Worker不会重复创建,不同窗口中的页面,均由一个Service Worker统一管理。 下面我们创建一下serviceworker.js文件。...安装成功之后,正常情况下,会进入Activated状态,同时会进入Service Worker的activate事件中。...回到安装的时候,如果当前的页面已经存在了一个激活的Service Worker的时候,新的Service Worker安装完成,会进入Waiting状态。...如果在具体的cache上调用这个方法,就是在当前缓存下去查找,如果在window.caches下调用,就是全局缓存中匹配。 CacheStorage和http缓存的关系 ?

1.2K20

咱们worker有力量-浏览器中实现多线程和离线应用

除了上述这些,其他的一些要点包括: 为了安全, worker 中不能访问 DOM 作为参数传递给 worker 构造器的 URI 必须遵循同源策略 worker 不能访问 window 对象,也不能调用...; //... } 共享 worker 的 onconnect 回调中直接发送了一个 postMessage,用于提示连接成功,这个动作页面刷新不会重新执行,而是重新打开页面才会执行。...的 Promise 的 then 回调中得到一个 ServiceWorkerRegistration 类型的对象; 正如例子中所示,主页面中就可以用这个实例化的 'registration' 对象调用...worker 安装 service worker 注册之后,install 事件会被触发 install 回调中,一般执行以下任务: 打开制定版本的缓存 缓存文件 确认所有需要的资源是否被缓存...新服务工作线程将会启动,且将会触发 install 事件 如果 service worker 已经被安装,但是刷新页面时有一个新版本的可用 -- 那么新版本虽会在后台安装,但还不会激活,且进入 waiting

2.4K80
领券