美文网首页
webpack 之前端性能优化

webpack 之前端性能优化

作者: 躺在家里干活 | 来源:发表于2019-10-09 10:23 被阅读0次

    1.将css从js中提取出来,并且将无用的css去掉然后进行压缩

    因为我用到了bootstrap,所以需要将bootstrap中无用的css去掉,如果用的是3.x的bootstrap可以下载定制版,这样可以减小包的大小,但是我用到的是4.x版本,没找到定制版所以下载了完整版。(这里我没有用npm下载到包依赖里,下面会解释原因)
    首先下载所需的插件

    npm install mini-css-extract-plugin purifycss-webpack purify-css optimize-css-assets-webpack-plugin cssnano glob-all --save-dev
    

    配置webpack.config.js

    //利用glob.sync实现多页面打包
    const glob=require('glob-all');
    
    //从js中提取css到单独的文件
    const MinicssExtractPlugin = require('mini-css-extract-plugin');
    //去掉无用的css
    const purifycssWebpack = require('purifycss-webpack');
    //压缩css
    const OtimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
    
    plugins: HtmlWebpackPlugins.concat([ //配置插件
        // 提取css
        new MinicssExtractPlugin({
          filename: [name].[contenthash:8].css
        }),
        // css摇树,去除无用css:注意插件顺序:html文件生成 > css提取 > css摇树
        new purifycssWebpack({
          //此处的路径必须配置正确,我当初也是因为这个路径费了好大劲
         paths: glob.sync([ 
            path.join(__dirname,'src/*/index.html'),
            path.join(__dirname,'src/*/index.js'),
            path.join(__dirname,'static/js/*.js')
            //因为我将bootstrap.js放到了static/js/目录中,有一些动态的样式在js中,所以需要将js也包括进来
            //这里之所以不用npm引入bootstrap是怕这边路径配置不正确导致css样式不全
          ])
        }),
        // 压缩css
        new OtimizeCssAssetsPlugin({
          assetNameRegExp: /\.css$/g,
          cssProcessor: require('cssnano')//此处压缩css代码配合cssnao
        })
    ])
    

    js

    //这里之前尝试用min.css,但是min.css总是导致样式乱掉,具体原因不详,自我感觉可能是分号的问题,所以引入了bootstrap.css,反正打包时还会重新压缩
    import 'static/css/bootstrap.css';
    import 'static/css/index.css'
    

    此处注意两点:
    1.css摇树时路径配置必须准确
    2.如果是引入第三方库不能引入压缩过的css(此项我仅验证了bootstrap 4.x)

    2.引入jQuery

    npm install jquery --save
    
    const webpack = require('webpack');
    
    module.exports = {
      resolve: {
        alias: { //别名
          'static': path.join(__dirname, 'static'),
          'jquery': 'jquery'
        }
      },
      plugins: [ //配置插件
        new webpack.ProvidePlugin({
          $: "jquery",
          jQuery: "jquery",
          'window.jQuery': "jquery"
        })
      ]
    }
    
    

    3.echats等第三方库非常大

    方法一:因为我只用到了简单的折线图和饼图所以只下载了这两个的定制版echarts.js
    方法二:按需引入 ECharts 图表和组件 可以按需引入的模块列表

    npm install echarts --save
    
    // 引入 echarts 主模块
    var echarts = require('echarts/lib/echarts');
    // 引入折线图和饼图
    require("./lib/chart/line");
    require("./lib/chart/pie");
    // 引入提示框
    require('echarts/lib/component/tooltip');
    

    方法三:使用了externals将第三方库以cdn的方式去引入

    • 在bootcdn上有echarts相关的cdn链接
    • 在html中引入echarts:<script src="//cdn.bootcss.com/echarts/3.2.2/echarts.simple.min.js"></script>
    • 在webpack中配置echarts
      在webpack.config.js文件内添加externals选项,和entry平级;
      externals: {
        echarts: 'echarts'
      },
    
    • 使用:
    let myChart = echarts.init(this.$refs('myChart'));
    myChart.setOption(option);
    

    我的个人博客,有空来坐坐

    相关文章

      网友评论

          本文标题:webpack 之前端性能优化

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