Webpack 生产环境性能优化之PWA

概述


PWA(渐进式网络开发应用程序) 主要由两部分组成:ServiceWorker & disk cache,它让我们的应用程序可以像 APP 一样,离线也能访问,性能也更好。但是由于兼容性问题,现在还没有大面积推广开来(但是大厂有使用,比如说淘宝)。要在项目中真正使用PWA,我们需要借助 workbox 这个库,而在 webpack 中,我们还需要引入 workbox-webpack-plugin 这个插件。


方案应用细节


第一步:在 webpack 配置文件中引入 workbox-webpack-plugin 插件

const WorkboxWebpackPlugin = require('workbox-webpack-plugin');

第二步:在 webpack 的 plugin 配置中添加 workbox-webpack-plugin 插件的实例

new WorkboxWebpackPlugin.GenerateSW({

    /**

    * 下面两个参数的作用:

    *  1、帮助serviceWorker快速启动

    *  2、删除旧的 serviceWorker

    */

    clientsClaim:true,

    skipWaiting:true

})

这个插件会自动生成 serviceworker 的配置文件和 workbox 库相关的文件,我们后面需要使用生成的配置文件去注册我们的 serviceworker 。接下来我们用 webpack 打包一下:

打包结果图

第三步:注册 serviceWorker 

if ('serviceWorker' in navigator) { // 兼容性判断

    window.addEventListener('load', () => {// 等所有资源加载完,再注册serviceWorker

        navigator.serviceWorker.register('../dist/service-worker.js')// service-worker.js 这个文件由 workbox-webpack-plugin 插件生成

            .then(() => {

                console.log("serviceworker 注册成功");

            })

            .catch((e) => {

                console.error("serviceworker 注册失败");

            });

        });

}

注册完 serviceWorker 以后,我们就可以在开发者工具的 application tab中找到我们注册的 serviceWorker 了:

serviceWorker注册结果图

我们还可以在 application 中看到使用 service-worker 和 workbox 缓存的文件:

缓存文件信息

这时候你把网络状态调整为 offline 以后,刷新页面还是能正常访问页面,因为我们已经做了文件缓存!当然即使在有网络的状态下刷新页面,浏览器也会优先使用缓存文件:

缓存文件使用情况


结语


我们已经对PWA 技术进行了一次简单而完整的尝试,有兴趣的小伙伴可以去查阅更多的资料,以便对 PWA 有更深入的了解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.优化打包构建速度 1.修改loader处理 当处理一个文件的时候,会去匹配所有的loader,但是往往一个文件...
    chen_cheng阅读 899评论 0 1
  • 在上篇中搭建了vue的基本脚手架,为了加快脚手架打包项目的构建速度和减少打包代码的体积,下面在上一篇的基础上添砖加...
    Evtion阅读 1,852评论 0 4
  • 缓存一直以来都是用来提高性能的一项必不可少的技术 , 利用这项技术可以很好地提高web的性能。 缓存可以很有效地降...
    SCQ000阅读 5,916评论 0 51
  • 简单介绍 PWA(Progressive Web App)渐进式Web APP,它并不是单只某一项技术,而是一系列...
    DJL箫氏阅读 861评论 0 0
  • 引言 网页缓存分为两大类,分别是服务器缓存和客户端缓存。SSR属于浏览器缓存,service worker属于浏览...
    brandonxiang阅读 7,889评论 0 3

友情链接更多精彩内容