美文网首页
Node.js实现服务端执行Service Worker

Node.js实现服务端执行Service Worker

作者: ziyang0116 | 来源:发表于2020-04-23 22:11 被阅读0次

PWA网页通过Service Worker缓存网页资源,达到离线也能使用的效果。目前,Android WebView已经支持Service Worker。
不过,Service Worker技术存在一个问题,需要运行过一次,才能得到缓存效果。
如何让PWA网页首次启动,也有缓存效果?
我想到的一个方案是,在服务端预先执行Service Worker,获得缓存的资源,打成离线包,下发到客户端。
实现服务端执行Service Worker,首先想到使用 Node.js。Service Worker是基于js的,用Node来实现最合适。
其中,模拟 importScript 接口是一个难点。Service Worker用 importScript,调用到外面的模块。
解决的办法是,采用node的 vm 作为Service Worker的容器。通过 runInContext 接口,执行Service Worker,或者注入 importScript 的模块。

// 初始化 vm context
 global.swContext = vm.createContext(swGlobalScope);
...
// 执行Service Worker,或者注入 `importScript` 的模块
 const script = new vm.Script(scriptContent);
 script.runInContext(global.swContext);

service-worker-node

service-worker-node 已经开发完成,并发布到 npm。service-worker-node 提供了node的Service Worker执行环境。可以在服务端预先获取缓存列表,或者做一些自动化测试。

npm install service-worker-node

具体API使用参考:service-worker-node

源码

service-worker-node

相关文章

网友评论

      本文标题:Node.js实现服务端执行Service Worker

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