美文网首页vue
webpack vue 首屏优化

webpack vue 首屏优化

作者: GongZH丶 | 来源:发表于2018-08-14 10:47 被阅读433次

前期开发的时候,把所有的东西都在index.js(也有人用main.js)中引入打包了,导致每次加载打包后的dist/app.js很大,加载很慢。所以要优化。

要优化,首先要知道每次都打包了些什么东西,什么这么大,为什么这么大。

所以网上流传着一个神奇的插件,可以分析打包后的东西 的 组成 。这个插件是 : webpack-bundle-analyzer

安装了这个插件以后,每次生成后,都可以在浏览器地址栏输入指定地址,就可以查看。

效果是这样:


1.jpg
安装

首先

npm install --save-dev webpack-bundle-analyzer    //安装插件

在webpack.config.js中 添加

let BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
    plugins: [new BundleAnalyzerPlugin()]  //插件
}

new BundleAnalyzerPlugin() 构造函数配置对象 :

new BundleAnalyzerPlugin({
  //  可以是`server`,`static`或`disabled`。
  //  在`server`模式下,分析器将启动HTTP服务器来显示软件包报告。
  //  在“静态”模式下,会生成带有报告的单个HTML文件。
  //  在`disabled`模式下,你可以使用这个插件来将`generateStatsFile`设置为`true`来生成Webpack Stats JSON文件。
  analyzerMode: 'server',
  //  将在“服务器”模式下使用的主机启动HTTP服务器。
  analyzerHost: '127.0.0.1',
  //  将在“服务器”模式下使用的端口启动HTTP服务器。
  analyzerPort: 8888, 
  //  路径捆绑,将在`static`模式下生成的报告文件。
  //  相对于捆绑输出目录。
  reportFilename: 'report.html',
  //  模块大小默认显示在报告中。
  //  应该是`stat`,`parsed`或者`gzip`中的一个。
  //  有关更多信息,请参见“定义”一节。
  defaultSizes: 'parsed',
  //  在默认浏览器中自动打开报告
  openAnalyzer: true,
  //  如果为true,则Webpack Stats JSON文件将在bundle输出目录中生成
  generateStatsFile: false, 
  //  如果`generateStatsFile`为`true`,将会生成Webpack Stats JSON文件的名字。
  //  相对于捆绑输出目录。
  statsFilename: 'stats.json',
  //  stats.toJson()方法的选项。
  //  例如,您可以使用`source:false`选项排除统计文件中模块的来源。
  //  在这里查看更多选项:https:  //github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21
  statsOptions: null,
  logLevel: 'info' 日志级别。可以是'信息','警告','错误'或'沉默'。
})

然后,正常编译启动运行就可以看到了

参考:
https://www.npmjs.com/package/webpack-bundle-analyzer
https://blog.csdn.net/qq_16559905/article/details/78551719

优化element-ui

使用 webpack-bundle-analyzer 插件查看后,发现最大的是 element-ui 。其实在每个组件中使用到的element-ui的UI其实不多,,那么,就可以按需引入。

按需引入的方式可以查看官网:http://element-cn.eleme.io/#/zh-CN/component/quickstart

按需引入

借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。

首先,安装 babel-plugin-component:

npm install babel-plugin-component -D

然后,将 .babelrc 修改为:

{
  "presets": [["es2015", { "modules": false }]],
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]
}

接下来,如果你只希望引入部分组件,比如 Button 和 Select,那么需要在 main.js 中写入以下内容:

import Vue from 'vue';
import { Button, Select } from 'element-ui';
import App from './App.vue';

Vue.component(Button.name, Button);
Vue.component(Select.name, Select);
/* 或写为
 * Vue.use(Button)
 * Vue.use(Select)
 */

new Vue({
  el: '#app',
  render: h => h(App)
});

完整组件列表和引入方式(完整组件列表以 components.json 为准)

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

Vue.use(Loading.directive);

Vue.prototype.$loading = Loading.service;
Vue.prototype.$msgbox = MessageBox;
Vue.prototype.$alert = MessageBox.alert;
Vue.prototype.$confirm = MessageBox.confirm;
Vue.prototype.$prompt = MessageBox.prompt;
Vue.prototype.$notify = Notification;
Vue.prototype.$message = Message;
具体应用

这样,在index.js入口文件中,就可以去除element-ui全局引用的部分了,然后在每个组件中,根据每个组件element-ui的使用情况按需引入,就可以了。

压缩代码

在生产环境中,还可以配置压缩代码,减小体积。
需要在webpack.config.js中添加

new webpack.optimize.UglifyJsPlugin({
        sourceMap: false, 
      compress: {
          warnings: false,
          drop_console: true,
          pure_funcs: ['console.log']
      }
    }),

这样就可以压缩代码了,在生产环境就可以减小体积。

具体代码可查看项目源码

相关文章

  • 构建工具

    Vue 首屏加载优化 关于 Vue 首屏加载优化的一点总结为什么我们要做三份 Webpack 配置文件 在知乎上我...

  • webpack vue 首屏优化

    前期开发的时候,把所有的东西都在index.js(也有人用main.js)中引入打包了,导致每次加载打包后的dis...

  • vue-cli简单实现骨架屏

    Vue项目首屏加载缓慢,基于webpack插件(vue-skeleton-webpack-plugin)实现一个骨...

  • 常见面试题--js+css+vue

    1、变量提升、函数提升 2、数组的常用方法 3.优化首屏加载速度 4.Vue 首屏加载速度优化 5、Vue如何设置...

  • VUE项目优化汇总

    注:本文只适用于 vue-cli 初始化的项目或依赖于 webpack 打包的项目 * 首屏加载优化 背景:基于v...

  • 首屏优化 & webpack优化

    MT https://www.jianshu.com/p/c74221f2f442[https://www.jia...

  • 暂时定义自己的前端规划方向

    一年内计划:1、保持危机感、熟练并复习前端知识、探索前端优化并测试优化效果(1、webpack打包优化;2、首屏加...

  • Vue首屏加载慢的优化方案

    使用vue构建项目首屏加载时,出现加载慢,白屏的问题解决方案: 步骤一 webpack来打包vue项目,vendo...

  • ssr个人初探

    ssr的好处主要以下两点 (1)优化首屏加载,使用vue-ssr可以把数据渲染成HTML, 并在首屏展示, 用户体...

  • Vue SPA 首屏加载优化实践

    写在前面 本文记录笔者在Vue SPA项目首屏加载优化过程中遇到的一些坑及优化方案! 我们以 vue-cli 工具...

网友评论

    本文标题:webpack vue 首屏优化

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