webpack性能优化(6)

有一种技术叫离线缓存,就是断开网络还能显示页面内容,它有两种方法,一种是appcache,不过它性能不好,已经被w3c废弃了,还有一种就是serviceWorker,它属于PWA(渐进式web应用)的一种功能。

首先要下载sw-precache-webpack-plugin,即npm i sw-precache-webpack-plugin或者yarn add sw-precache-webpack-plugin

然后引入

const path=require('path');
const HtmlWebpackPlugin=require('html-webpack-plugin');
const HappyPack=require('happypack');
const ParallelUglifyPlugin=require('webpack-parallel-uglify-plugin');

var SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');

//const ExtractTextWebpackPlugin=require('extract-text-webpack-plugin');
module.exports={
    entry:'./main.js',
    output:{
        path:path.resolve(__dirname,'./dist'),
        filename:'bundle.js'
    },
    module:{
        rules:[{
            test:/\.css$/,
           use: ['happypack/loader?id=css']
        },
            {
                test:/\.js$/,
                use:['happypack/loader?id=babel'],
                exclude:path.resolve(__dirname,'node_modules')
               
            },
            {test:/\.jpg$/,
            loader:'url-loader',
            
            options:{limit:3*1034,callback:'file-loader'}
             },
              {test:/\.html$/,
              loader:'html-loader'}
           
    ]
    },

     devServer:{hot:true,
        host:'127.0.0.1',
        port:4000,
        open:true,
         compress:true,
         historyApiFallback:true
     },

    plugins:[new HtmlWebpackPlugin({template:'./index1.html'}),
   
            new HappyPack({id:'babel',loaders:['babel-loader?cacheDirectory']}),
            new HappyPack({id:'css',loaders:['style-loader','css-loader']}),
            new ParallelUglifyPlugin({
                uglifyJS:{output:{
                    beautify:false,
                    comments:false
                },
                compress:{
                   
                    drop_console:true,
                    collapse_vars:true,
                    reduce_vars:true
                }
            }
            }),
            
            new SWPrecacheWebpackPlugin({
                filename:'service-worker.js',
                minify: true,
            }
            )
           
],
    mode:'development'
}

然后在main.js中注册service-worker文件

 if('serviceWorker' in navigator){
	window.addEventListener('load',()=>{
		navigator.serviceWorker.register('./service-worker.js')
		.then(()=>{console.log('sw注册成功')})
		.catch(()=>{console.log('sw注册失败')})
		})
	}	

最后打包它会生成一个service-worker.js文件,在network中断开网络页面仍然能正常展示

除此之外,还可以在生成的service-worker文件中监听,拦截网络请求等等

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值