项目的优化策略

1.减少文件体积

可以将一些公用的方法,防抖,节流,时间格式化之类的,放在一个js文件中;在使用的时候,直接在页面引入;或将该js文件在main.js中引入,并注册为全局的方法

const utils={
    方法名(){
        //处理逻辑
    }
}
export default utils

全局工具函数

import utils from './utils'
Vue.prototype.$utils=utils
//使用的时候
$utils.方法名

2.build阶段,移出控制台的信息

在写项目的时候,常常将我们请求的数据进行打印,看看数据是否请求到;但这样的话,在项目发布的时候容易暴露信息,为了将信息进行维护,我们需要在开发环境中将控制台的信息清空

第一种:重写console.log方法(在index.HTML文件中)

console.log()=fucntion(){}

第二种:安装插件 babel-plugin-transform-remove-console

打开项目控制台,点击依赖->开发依赖,输入babel-plugin-transform-remove-console,安装
打开babel.config.js

//项目发布阶段需要用到的babel插件
const productPlugins = []

//判断是开发还是发布阶段
if(process.env.NODE_ENV === 'production'){
  //发布阶段
  productPlugins.push("transform-remove-console")
}

module.exports = {
  "presets": [
    "@vue/app"
  ],
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ],
    ...productPlugins
  ]
}


3.更好的实现前后端交互,建议使用$loading

如果对于element组件库是按需引入的话,若想实现$loading的效果

1.$loading是在封装的请求接口axios拦截器request.js
中使用的;将此方法在main.js中进行全局注册的话
2.有可能获取不到$loading,因为文件的加载顺序的问题,先加载main.js,(由于找不到element.js按需引入中的$loading,所以会出错)
3.element.js文件中
Vue.use(Loading.directive);
Vue.prototype.$loading = Loading.service;

$loading的实现

4.修改webpack的默认配置

  • 根目录下创建vue.config.js文件

  • 根据不同的应用环境,引入不同的文件(创建main-prod.js文件和main-dev.js文件)

  • vue项目默认情况下,开发模式和发布模式,共用一个打包文件main.js,为了将这两种模式分离,引入不同的js文件

module.exports = {
    chainWebpack:config=>{
        //发布模式
        config.when(process.env.NODE_ENV === 'production',config=>{
            //entry找到默认的打包入口,调用clear则是删除默认的打包入口
            //add添加新的打包入口
            config.entry('app').clear().add('./src/main-prod.js')
        })
        //开发模式
        config.when(process.env.NODE_ENV === 'development',config=>{
            config.entry('app').clear().add('./src/main-dev.js')
        })
    }
}
​
chainWebpack可以通过链式编程的形式,修改webpack配置
configureWebpack可以通过操作对象的形式,修改webpack配置

5.CDN

CDN服务器,放置的都是一些长时间内不会改变的数据,eg:图片,放在这儿的话,就不需要再在打包好的文件夹中引入了;

打包后的文件中的chunk_vendors.js文件过大,(因为依赖项的第三方包都被打包在该文件中);可以通过externals排除这些包,使其不被打包到该文件中;

1.在vue.config.js文件的发布模式中,写入以下代码

 2..将main.js中引入的相关样式文件,删除,在public/index.html文件的头部,添加以下CDN资源引用(引入css文件在上,js文件在下)

 3.在config中配置的相关,类似于axios之类的,当浏览器解析到,会在window进行查找,在public/index.html文件中也进行引入下载的插件相关的cdn文件

 

4.使用CDN减少element-ui占的内存

通过网络资源的加载,实现element-ui的使用,不需要进行按需引入

 

6.开发,发布环境下,解决首页内容的形式不同

开发环境中使用的是import加载第三方包,而发布环境则是使用CDN,那么首页也需根据环境不同来进行不同的实现 我们可以通过插件的方式来定制首页内容,打开vue.config.js

  • 在vue.config.js文件中写入

  //使用插件
//发布环境下
            config.plugin('html').tap(args=>{
                //添加参数isProd
                args[0].isProd = true
                return args
            })
//开发环境下
 config.plugin('html').tap(args=>{
                //添加参数isProd
                args[0].isProd = false
                return args
            })
  • 根据isProd的值,是否在public的index.html中引入cdn相关js文件

 

注意:

1.index.HTML文件在打包编译的过程中,都会被使用,可能会出现资源被重复引入的情况

2.根据生产环境还是开发环境(public的index.html中的htmlWebpackPlugin),判断是否引入某些文件

3.确保cdn中引入的文件的版本是否和package.json中的是否一致,拿着cdn引入的文件的网址去浏览器上验证是否能打开

7.路由懒加载的方式

打包后的dist文件中的chunk-vendors.js 是核心文件可以通过,减小打包后的app.js文件的大小,实现性能优化(因为我们写的页面都在app.js中,通过路由懒加载,只加载请求的页面(当路由被访问时才加载对应的路由文件),减少性能消耗)
  • 安装:@babel/plugin-syntax-dynamic-import

在babel.config.js中声明该插件

//项目发布阶段需要用到的babel插件
const productPlugins = []
​
//判断是开发还是发布阶段
if(process.env.NODE_ENV === 'production'){
  //发布阶段
  productPlugins.push("transform-remove-console")
}
​
module.exports = {
  "presets": [
    "@vue/app"
  ],
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ],
    ...productPlugins,
    //配置路由懒加载插件
    "@babel/plugin-syntax-dynamic-import"
  ]
}
​
  • 路由配置router的index.js文件中的路由更改为按需加载的形式

    想要在一组的路由的名称要一致 webpackchunkName,相同名称的会被打包到同一个js文件里面

    分组的依据: ,父被加载,子也要预先加载出来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值