美文网首页
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