前端Vue之性能优化全方案(详解nginx配置gizp等等)

一、UI组件按需引入

  1. 借助 babel-plugin-component 插件 npm install babel-plugin-component -D

  2. 创建plugins/element.js 文件夹 作为UI组件的引入文件

import Vue from 'vue';

import {
  Option,
  Dialog,
  Dropdown,
  Input,
  Tooltip,
  Form,
  Row,
  Loading,
  MessageBox,
  Message,
  Table,
  FormItem,
  Icon,
  Button,
  Radio,
  Col,
  Upload,
  Progress,
  Badge,
  Carousel,
  CarouselItem,
  Container,
  Header,
  Aside,
  Main,
  Footer,
  DropdownMenu,
  DropdownItem,
  Menu,
  Submenu,
  MenuItem,
  Checkbox,
  Switch,
  CheckboxButton,
  Select,
  TableColumn,
  Popover,
  Tabs,
  TabPane,
  Tag,
  Tree,
  Card,
  Pagination,
  Autocomplete,
  MenuItemGroup,
  InputNumber,
  RadioGroup,
  RadioButton,
  OptionGroup,
  CheckboxGroup,
  ButtonGroup,
  DatePicker,
  TimeSelect,
  TimePicker,
  Breadcrumb,
  BreadcrumbItem,
  Alert,
  Slider,
  Cascader,
  Transfer,
  ColorPicker,
  CollapseItem,
  Collapse,
  Steps,
  Step,
  Rate,
} from 'element-ui';

Vue.use(Pagination);
Vue.use(Dialog);
Vue.use(Autocomplete);
Vue.use(Dropdown);
Vue.use(DropdownMenu);
Vue.use(DropdownItem);
Vue.use(Menu);
Vue.use(Submenu);
Vue.use(MenuItem);
Vue.use(MenuItemGroup);
Vue.use(Input);
Vue.use(InputNumber);
Vue.use(Radio);
Vue.use(RadioGroup);
Vue.use(RadioButton);
Vue.use(Checkbox);
Vue.use(CheckboxButton);
Vue.use(CheckboxGroup);
Vue.use(Switch);
Vue.use(Select);
Vue.use(Option);
Vue.use(OptionGroup);
Vue.use(Button);
Vue.use(ButtonGroup);
Vue.use(Table);
Vue.use(TableColumn);
Vue.use(DatePicker);
Vue.use(TimeSelect);
Vue.use(TimePicker);
Vue.use(Popover);
Vue.use(Tooltip);
Vue.use(Breadcrumb);
Vue.use(BreadcrumbItem);
Vue.use(Form);
Vue.use(FormItem);
Vue.use(Tabs);
Vue.use(TabPane);
Vue.use(Tag);
Vue.use(Tree);
Vue.use(Alert);
Vue.use(Slider);
Vue.use(Icon);
Vue.use(Row);
Vue.use(Col);
Vue.use(Upload);
Vue.use(Progress);
Vue.use(Badge);
Vue.use(Card);
Vue.use(Rate);
Vue.use(Steps);
Vue.use(Step);
Vue.use(Carousel);
Vue.use(CarouselItem);
Vue.use(Collapse);
Vue.use(CollapseItem);
Vue.use(Cascader);
Vue.use(ColorPicker);
Vue.use(Transfer);
Vue.use(Container);
Vue.use(Header);
Vue.use(Aside);
Vue.use(Main);
Vue.use(Footer);
Vue.use(Loading.directive);
Vue.prototype.$loading = Loading.service;
Vue.prototype.$confirm = MessageBox.confirm;
Vue.prototype.$message = Message;
3、main.js中 引入 两个东西
import './plugins/element';
import './styles/theme/element-variables.scss';

二、 Vue 配置使用 externals 使用cdn减小打包体积

           注意:修改完config文件 重跑项目 重新跑配置

1、vue.config.js  在module.exports对象里 进行配置 不需要进行打包的资源

2、在入口文件index.html中 进行js引入   public/index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
    />
    <link rel="icon" href="./favicon.ico" />
    <title><%= webpackConfig.name %></title>
  </head>
  <script src="./mock/data.js"></script>
  <body>
    <noscript>
      <strong
        >We're sorry but <%= webpackConfig.name %> doesn't work properly without
        JavaScript enabled. Please enable it to continue.</strong
      >
    </noscript>
    <div id="app"></div>
    <script src="./static/base.js"></script>
    <!-- 引入Vue.js -->
    <script
      crossorigin="anonymous"
      integrity="sha512-BKbSR+cfyxLdMAsE0naLReFSLg8/pjbgfxHh/k/kUC82Hy7r6HtR5hLhobaln2gcTvzkyyehrdREdjpsQwy2Jw=="
      src="https://lib.baomitu.com/vue/2.6.12/vue.min.js"
    ></script>
    <!-- 引入vuex.js -->
    <script src="https://cdn.staticfile.org/vuex/3.0.0/vuex.min.js"></script>
    <!-- 引入vue-router -->
    <script src="https://cdn.staticfile.org/vue-router/3.0.0/vue-router.min.js"></script>
    <!-- built files will be auto injected -->
  </body>
</html>

三 、gzip压缩

启示录: 正常我们打包完后,在打包的文件里,会生产出来js/css/html的文件夹,在js文件夹里面有几个以chunk开头的文件  体积较大  再加上 Vue的 SPA单页面应用 导致首次加载较慢 因为这些静态资源 影响了速度  所以我们要进行 js/css 压缩处理

      ①:先进行Vue.config的配置 

 1、打开vue.config 进行配置 告诉webpack我们要处理什么文件

 2、安装webpack插件 compression-webpack-plugin

       npm install compression-webpack-plugin --save-dev

 3、引入插件 

       const CompressionWebpackPlugin = require('compression-webpack-plugin');

 4、const 一个变量  保存需要处理的文件后缀

       const productionGzipExtensions = ['js', 'css'];

 5、配置进去 

      

 plugins: [
      // gzip压缩
      new MonacoWebpackPlugin(),
      new CompressionWebpackPlugin({
        algorithm: 'gzip',
        test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
        threshold: 10240, // 超过10kb就压缩
        minRatio: 0.8,
      }),
      new webpack.optimize.LimitChunkCountPlugin({
        maxChunks: 5,
        minChunkSize: 100,
      }),
    ],

主要代码:

         ②:nginx配置gzip

正常来说,你的nginx路径应该为  /etc/nginx

1、在nginx/中打开  你要处理的那个项目入口

我的项目都在这里 conf.d 所以我要打开这个文件 找我需要gzip压缩的项目

2、在server中写入以下代码

          gzip on; #开启gzip功能
	      gzip_types *; #压缩源文件类型,压缩所有
	      gzip_comp_level 6; #gzip压缩级别
	      gzip_vary on;  #往头信息中添加压缩标识
	      gzip_min_length 1k; #进行压缩响应页面的最小长度,content-length
	      gzip_http_version 1.1; #指定压缩响应所需要的最低HTTP请求版本
	      gzip_disable "MSIE[1-6]\.";  #对IE6以下的版本都不进行压缩
	      gzip_proxied off; #nginx作为反向代理不压缩服务端返回数据
	      gzip_buffers 4 16k; #缓存空间大小

       重启nginx即可

   

效果图:

体积缩小了三分之二 

 四 、图片处理

     ①:图片压缩     (我目前使用的 也是我最推荐的方法之一 简单方便)

 有时候图片的资源太大了 严重影响我们项目加载的速度 所以图片压缩是完全有必要的

 

网上有很多 图片处理的工具 这里我推荐一个吧 

在线图片压缩 - docsmall 在线图片压缩工具,在线图片压缩软件

我们图片处理完之后 替换到项目上就可以啦

    ②:腾讯云    (把图片丢到腾讯云上) 使用腾讯云存储图片

我不太习惯这个方法 感觉有点麻烦  之前搞过一次 我不写具体操作了 你们看这个文章吧

如何使用腾讯云存储图片_腾讯云图片存储_多多的小宝贝的博客-CSDN博客

    ③:精灵图/雪碧图/ 乱码七糟的   这些处理也可以  不过麻烦 我不喜欢

 五、其他Vue的性能优化

1、路由懒加载

2、v-if和v-for 避开使用 避免重加载

3、图片资源懒加载   可以使用 Vue 的 vue-lazyload 

4、v-if 和 v-show 区分使用场景

     代码层次这方面的处理  主要看个人  咱们尽量书写 优秀、高质量的代码 避免冗余  写代码的时候 尽量多思考 如何可以用更少 更好的代码实现

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值