-
Notifications
You must be signed in to change notification settings - Fork 45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Day30 - 详细说一个ServiceWorker的应用 #86
Comments
先解释一下什么是 ServiceWorker一个服务器与浏览器之间的中间人角色,如果网站中注册了service worker那么它可以拦截当前网站所有的请求,进行判断(需要编写相应的判断程序),如果需要向服务器发起请求的就转给服务器,如果可以直接使用缓存的就直接返回缓存不再转给服务器。从而大大提高浏览体验。 其实pwa就是一种ServiceWorker。我们常见的vue官网,nuxt官网都是使用了ServiceWorker。 |
Service worker本质上充当Web应用程序、浏览器与网络(可用时)之间的代理服务器,这个API旨在创建有效的离线体验,它会拦截网络请求并根据网络是否可用来采取适当的动作、更新来自服务器的的资源,它还提供入口以推送通知和访问后台同步API。 |
定义 if ('ServiceWorker' in navigator) {
window.addEventListener('load', function () {
/* 创建并指定对应的执行内容 */
/* scope 参数是可选的,可以用来指定你想让 service worker 控制的内容的子目录。 在这个例子里,我们指定了 '/',表示 根网域下的所有内容。这也是默认值。 */
navigator.serviceWorker.register('./serviceWorker.js', {scope: './'})
.then(function (registration) {
console.log('ServiceWorker registration successful with scope: ', registration.scope);
})
.catch(function (err) {
console.log('ServiceWorker registration failed: ', err);
});
})
}
/* 监听安装事件,install 事件一般是被用来设置你的浏览器的离线缓存逻辑 */
this.addEventListener('install', function (event) {
/* 通过这个方法可以防止缓存未完成,就关闭serviceWorker */
event.waitUntil(
/* 创建一个名叫V1的缓存版本 */
caches.open('v1').then(function (cache) {
/* 指定要缓存的内容,地址为相对于跟域名的访问路径 */
return cache.addAll([
'./index.html'
]);
})
);
});
/* 注册fetch事件,拦截全站的请求 */
this.addEventListener('fetch', function(event) {
event.respondWith(
// magic goes here
/* 在缓存中匹配对应请求资源直接返回 */
caches.match(event.request)
);
}); |
一个应用场景就是实现 |
service worker 常用的就是做静态资源的缓存。另一个应用场景的话,因为 service worker 可以拦截请求,所以可以做一层代理。包括统计也好,转发请求也行,还能在客户端写假请求,然后根据不同的 service worker 来处理接口调用。他是依赖于worker的,所以有不阻塞js的效果,那可以用于需要进行大量计算的请求。 |
|
|
提到 Service Worker ,不得不先介绍一下 Web Worker,众所周知 javaScript 是执行在单线程的,如果执行大量计算任务就会堵塞了前端的渲染。而通过独立的线程的能力,Web Worker 可以分解耗时的任务。但是它的功能不应只局限于此,Service Worker 便是在 Web Worker 的基础上增加了离线缓存的能力。 |
详细谈谈serviceWorker应用之一: 上面提到的FCM即 |
服务工作者线程(service worker)是一种类似浏览器中代理服务器的线程,可以拦截外出请求和缓存响应。 Service Worker 是一个浏览器中的进程,它在被注册安装之后,能够被在多个页面中使用,也不会因为页面的关闭而被销毁。 缓存响应: |
|
Service Worker运行于浏览器后台,不受页面刷新的影响,可以监听和截拦作用域范围内所有页面的 HTTP 请求。同时serviceWorker也是pwa的核心,可以在基于浏览器的 web 应用中实现如离线缓存、消息推送、静默更新等 native 应用常见的功能,以给 web 应用提供更好更丰富的使用体验。 |
|
一个服务器与浏览器之间的中间人角色,如果网站中注册了service worker那么它可以拦截当前网站所有的请求,进行判断(需要编写相应的判断程序),如果需要向服务器发起请求的就转给服务器,如果可以直接使用缓存的就直接返回缓存不再转给服务器。从而大大提高浏览体验。 |
PWA是Web应用技术向native应用的自然眼神,而Service Worker是PWA的关键; 具体使用方式:
操作过程:
|
service worker是一个浏览器和服务器之间的一个代理服务器,它能够拦截指定页面内的所有http请求包括资源请求,并可以将指定的资源缓存下来。 应用场景 PWA渐进式web应用 PWA简单来说,就是让web页面可以独立于浏览器app,单独有一个桌面入口,并且可以离线使用。 |
The text was updated successfully, but these errors were encountered: