【优化】Vue项目如何优化?这篇文章就够了!超全优化方面

5 篇文章 0 订阅
订阅专栏

掘金同人账号: 🍧summer holiday,不定时发送【对标大厂的必会面试题】、【必会常用算法】、【必会高并发解决】、【优化】等专题栏目供大家学习观看

在开始之前我们介绍一个使用,这个使用大家可以先不看,直接跳到Vue打包结果的优化部分进行观看,然后再看的的途中提及再返回观看更佳

1.在Vue-Cli中自定义webpack配置

vue-cli官方文档

如果我们直接在configureWebpack中配置的话我们的配置既会在生产环境出现还会再开发环境出现,于是这肯定不是我们想要的,我们可以这么去优化配置,其实vue-cli帮我们考虑到了这一点,他在我们配置时为我们传入了一个参数生产环境开发环境

  1. 在项目中新建webpack.config.js文件
    在这里插入图片描述
  2. 在vue.config.js中配置属性字段configureWebpack
    在这里插入图片描述
  3. 在webpack.config.js中判断当前环境
    在这里插入图片描述
  4. 在vue.config.js文件中引入我们从webpack.config.js文件中导出的环境配置
    在这里插入图片描述

2.对Vue打包结果的优化

2.1分析打包结果

2.1.1分析打包结果工具的使用

因为vue2.0使用的是webpack作为打包工具,所以我们可以将自己需要的webpack的plugin或者loader加入到vue2.0打包的webpack中

具体在vue-cli中加入自定义的webpack配置我们可以参考47.在Vue-Cli中自定义webpack配置

因为可以加入自己的webpack配置所以我们可以通过webpack的包结果分析plugin:webpack-bundle-analyzer,将他加入到我们的生产环境打包结果,这样我们打包vue时就可以很直观的看出我们这个vue项目中各个模块的大小分布情况

2.1.2查看打包结果

我们大家都知道vue是一个非入侵性的web框架,因为它的非入侵性我们可以往vue这个框架中加入特别多自己习惯的能够增加开发效率的第三方JS库,于是我们的打包结果可能是这样的:
在这里插入图片描述

在Vue2中是没有所谓的tree-shaking优化的,所以Vue2其实在打包结果优化方面可以说是甚微的

问题1

​ 我们可以看到我们引入的第三方库,它们占用的打包结果体积是非常庞大的,可能我们vue的代码加上我们自己的代码还没有两个第三方JS库的打包结果代码量来的多,我们这里仅仅才引用了两个非常常用的第三方JS库就已经占比打包结果这么庞大了,那我们在大型项目中,我们可想而知打包结果可能要承担巨额的第三方JS库代码量

问题2

​ 我们大家都知道前端做JS代码兼容浏览器使用Bable就可以完成,Babel将我们ECMAScript从开始到现在基本上大部分的API和对象都模拟了一遍,于是我们可以在开发中随意使用高版本ECMAScript提供的便捷开发语法,然后Bable帮我们转化成兼容低版本浏览器的低版本JS代码,可是我们知道,低版本JS模拟高版本JS需要编写大量的JS代码来做底层代码实现,这是一个很占代码体积的工作,这导致了我们使用高版本浏览器的用户因为有的用户使用低版本浏览器所以导致代码体积过大,我们高版本浏览器用户也要加载同样巨额的JS代码

猜想1(优化公共第三方JS库打包体积): 那么我们能不能将这些第三方JS库抽离出去呢?不加在我们的项目工程里面了,因为我们只是使用到这个第三方库的代码功能而已,我们都是要网络请求的,我们知道一个东西叫做CDN节点加速,大家可能会说CDN节点加速是要收费的,这里要提一个好东西就是我们大量常用的JS第三方库它们是有公共的CDN节点加速的,但是也仅仅只能用来抽离出公共JS第三方库,我们自己的工程的代码是无法享受CDN节点加速的
[猜想2(启动现代模式的打包结果优化)]: 我们能不能将vue的打包结果分成两种打包结果,一种是不做Bable代码兼容,我们的代码体积就会小很多,然后在高版本用户访问时他加载的是我们提供的未Bable代码,而低版本浏览器访问时,因为兼容性问题,他们去加载我们的已Bable代码,这样不就既保证了高版本浏览器用户的体验,又保证了低版本浏览器用户的兼容吗?

那么我们要怎么来实现呢?接下来详细介绍这两个优化方式↓↓↓

2.2优化公共第三方JS库打包体积

这里我们推荐一个拥有大量第三方JS库的CDN加速(公共): BootCDN
在这里插入图片描述
在这里插入图片描述
在这个上面我们可以搜到大量已经部署在CDN上的第三方JS库,例如Vue,Vue-Router,Vuex,jQuery,Mockjs
在这里插入图片描述
这里我们可以对vue-cli的webpack配置做一些手脚:

如何往vue-cli中加入自定义的webpack配置,参考官方Vue-Cli文档 官方文档

// vue.config.js
module.exports = {
  configureWebpack: {
    externals: {
        vue: "Vue",
        vuex: "Vuex",
        "vue-router": "VueRouter",
        axios: "axios",
        jquery: '$',
        mockjs: 'Mock'
    },
  },
};

其实我们mock无需这样子做,因为真实的项目开发中mock是一定不存在的,他只会方便我们前端进行接口数据模拟的工具

由于我们这样子加的话我们会导致开发环境也会做这些操作,这样会影响我们的开发效率,所以我们需要区分开发环境配置和生产环境配置,我们可以参考上面47.在Vue-Cli中自定义webpack配置将configureWebpack配置到生产环境配置中,而不要加在开发环境配置中
在这里插入图片描述
由于我们将他们抽离了出去使用第三方JS库了所以我们需要在页面中自己手动引入CDN节点的第三方JS库:
在这里插入图片描述

此时我们为什么外面要套一个Nodejs的模板语法呢?因为我们这些script引入的资源在开发环境是不需要的,所以我们去判断当前打包环境是否是生产环境,如果是生产环境我们才会拥有这些script标签在开发环境中它是不会存在的

生产环境的html
在这里插入图片描述
开发环境的html
在这里插入图片描述
因为我们在webpack中配置了替换全局变量,所以我们在use语法时需要进行特殊处理:

vur-router
在这里插入图片描述
vuex
在这里插入图片描述
而像axios,Vue,Mock,这种因为与变量名重合所以不用考虑
在这里插入图片描述
然后我们打包就会发现我们的项目中第三方库的JS体积都被抽离出去了:
在这里插入图片描述
项目如果经过了gzip的压缩则变成44.4kb的大小高度,利用公共CDN我们实现了打包体积的优化

注意:在web安全的世界中js其实是最大的安全漏洞隐患,因为我们用的是别人给的CDN,所以引用的是别人的js代码,此时我们想到了没有,我们网站的js代码是别人给的,那别人是不是如果改动了js代码,那么可以实现跨站脚本执行,那么我们网站的安全何从谈起,所以大厂都有自己的CDN完全不慌,这只是一个隐患,有可能发生而已。毕竟权力掌握在自己手里才是最安心的

2.3启动现代化模式的打包方式优化不同浏览器版本的用户

这种优化方式在vue-cli中帮我们考虑到了并帮我们做了,我们只需在package.json配置文件中给build执行的cmd代码加上 --modern即可:
在这里插入图片描述

因为它会又两种打包结果,所以我们的项目体积可能会比一种打包结果的体积大,不过在高版本用户使用时他只会加载自己的那部分小js代码,vue通过对我们的html做了手脚:实现了加载的优化
在这里插入图片描述
prefetch的优先级比preload的低,prefetch相当于我现在不怎么用你慢慢加载就好,preload是一开始你就必须要加载因为我现在急用

这种方式的优化非常的方便,无需我们去做任何事情,vue-cli在打包时就帮我们做好了

说了这么多打包加载上面的优化,可是我们用户访问时影响最多的还是我们的组件性能,我们一个小型项目的组件都可能拥有上百个组件,大型项目更不用说了,所以我们组件方面的优化是非常重要的一个优化,那么接下来我们就来讲解组件上的优化↓↓↓

2.4组件加载方面的优化

我们想想我们通常在什么地方加载组件呢?是不是当我们匹配到某个路由时加载某些组件,对吧?那么我们在vue-router中是如何引入组件的呢?你是否是这样引入组件的:
在这里插入图片描述
我们想想,如果import在上面是不是不管我们这个路由是否被匹配代码从上往下读,都会夹在我们所有的组件,可是我们有很多组件现在都用不到呀,那它这个时候就将我们的组件加载进入,很影响我们用户第一次加载时的问题呀,**我们能不能实现,当我匹配到这个路由了他在去加载这个组件呢?**这就是我们要说的异步组件加载

其实实现异步组件加载很简单我们只需要改变一种组件引入的写法即可:
在这里插入图片描述
我们大家都知道import返回的是一个promise,所以import是异步的,然后我们通过阅读官方文档知道,component不但可以接收组件配置对象,还可以接收一个函数,然后通过执行这个函数返回一个组件配置对象,这就是一个质的变化了,原先我们通过实实在在的组件进行占位,而我们此时使用的仅仅只是几行函数代码进行占位了,且当我匹配到时再去执行这个函数然后拿到组件

组件的本质其实就是一个组件配置对象,我们可以回想一下vue文件的script部分,我们是不是都会有一个export default {

}这就是导出我们这个组件中的配置

这样的第一次加载效率能不快吗?

vue的官方文档也有对异步组件进行介绍,还有更多更好的配置方式在官方文档中都有介绍 官方文档

2.5首屏显示优化

我们大家都知道我们vue页面中所有的dom都是通过js执行然后才渲染完成的,我们的html代码实际上仅仅只有几十行,那么我们如果加载js时很慢页面就会出现一段白屏阶段,那么这个白屏阶段给用户的体验就不是很好,我们是否可以给一些显示给用户看呢?

我们可以在项目中加入一个加载动效的动画图片在静态文件中,然后在html文件的app这个div中加入这个图片让它动就完事了,我们可以在app这个div中随便写东西,因为我们知道当一个元素被作为模板时,它原先里面的内容就会全部被覆盖,所以我们随便写:
在这里插入图片描述
当我们的js加载完成之后我们的img就会被覆盖了,所以这种效果是特别好的,因为静态资源是在我们的项目当中直接有的,所以加载效率会特别的快,所以尽量让图片的大小变小这样会更好的提高项目效率
在这里插入图片描述

3.总结

优化方案:

  1. CDN提取公共库
  2. 使用现在化的打包方式
  3. 使用异步组件
  4. 白屏处理

以上就是所有的Vue优化方案了,如果有帮助到大家可以动动你的小手一键三连,博主会不定时发送【对标大厂的必会面试题】、【必会常用算法】、【必会高并发解决】、【优化】等专题栏目供大家学习观看,如果有更多更好的优化方案欢迎大家评论呀,博主会第一时间进行测试然后总结给大家的!

vue项目优化(代码优化)
Mark Sheng的博客
12-07 1160
1.keep-alive 1. 使用keep-alive缓存不活动的组件 keep-alive是一个抽象组件:它自身不会渲染一个DOM元素,也不会出现在父组件链中;使用keep-alive包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。 2. 使用路由懒加载 Vue 是单页面应用,可能会有很多的路由引入 ,这样使用 webpcak 打包后的文件很大,当进入首页时,加载的资源过多,页面会出现白屏的情况,不利于用户体验。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载
如何应对vue项目优化的需求,掌握这“神器”就
01-08
文章是博主针对之前做的一个vue移动端项目进行优化之后的总结,项目用的是vue-cli3 + spa。本文章针对的是简单的首屏加载优化,该文章还有后续版本。 分析 vue-cli 3.x自带了分析工具,直接运行vue-cli-service ...
在实际工作中,可以对Vue做哪些优化
我的博客简介
01-29 656
使用虚拟列表:对于大型列表,可以使用虚拟滚动(Virtual Scroll)或虚拟列表(Virtual List)技术,只渲染可见区域内的列表项,减少 DOM 节点的数量,提高性能。合理使用计算属性和 watch:避免在模板中频繁使用复杂的计算属性,尽量将计算逻辑提取为计算属性,以减少模板的渲染次数。使用异步组件:对于一些非关键的组件,可以使用异步组件进行延迟加载,提高初始加载速度。避免过度渲染:避免使用过多的嵌套组件和无限循环的计算属性,减少不必要的渲染和响应。组件进行缓存,避免每次重新渲染和销毁组件。
vue项目优化
weixin_45695200的博客
09-12 6899
目录一、代码层面的优化二、Webpack 层面的优化三、基础的 Web 技术优化 vue项目优化分为三部分: Vue 代码层面的优化 webpack 配置层面的优化 Web 技术层面的优化 一、代码层面的优化 1 v-for 遍历为 item 添加 key 在列表数据进行遍历渲染时,需要为每一项 item 设置唯一 key 值,方便 Vue.js 内部机制精准找到该条列表数据。 2 v-for 遍历避免同时使用 v-if v-for 比 v-if 优先级高,这意味着 v-if 将分别重复运行于每个 v
vue项目性能优化
最新发布
2401_84093899的博客
04-20 853
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处免费获取。是希望能帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**[外链图片转存中…(img-z0oZTgth-1713579443061)][外链图片转存中…(img-PhNQZl4B-1713579443061)]
vue项目性能优化详解汇总
前端打工人的博客
04-30 5118
提起性能优化 很多人眼前浮现的面试经验是不是历历在目呢?反正,性能优化在我看来他永远是前端领域的热度之王。 先说一下性能优化的方案: 一、基础优化(代码以及编码规范) 1、v-if 和 v-show 区分使用场景 v-if=false时不渲染DOM,v-show会预渲染DOM,v-if 在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建 2、computed 和 watch 区分使用场景 computed:是计算属性,依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下
前端项目时因chunk-vendors过大导致首屏加载太慢,Vue Build时chunk-vendors的优化方案...
zhangzhiping35的专栏
08-03 3168
1、compression-webpack-plugin插件打包.gz文件 安装插件 也可以指定版本我这里下载的是1.1.2版本的,试过更高的版本会有ES6语法的报错,因为我node使用的是v12,如果node版本更高可以尝试更高版本 npm install --save-dev compression-webpack-plugin npm install --save-dev co...
总结4个方面优化Vue项目
10-17
在本篇文章里我们给大家整理了一篇关于优化VUE项目的四个总要点,对此有需要的朋友们学习下天。
浅谈vue项目可以从哪些方面进行优化
08-27
本篇文章主要介绍了浅谈vue项目可以从哪些方面进行优化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
优化Vue项目编译文件大小的方法步骤
12-10
与其说是优化 Vue,不如说主要是在 webpack 打包的配置中做些文章,使得 Vue 编译后的文件尽可能的小。以下介绍自己在项目中进行优化的过程,其中的内容也许并不适合于每个项目,但整体思路是差不多的。 定位问题 要...
Vue 前端项目性能优化方案
weixin_50367873的博客
04-07 559
vue前端性能优化
vue 项目中的前端性能优化
weixin_37795155的博客
10-25 572
vue 项目中的前端性能优化
我是如何把vue项目启动时间从70s优化到7秒的
CRMEB小程序商城的博客
12-20 7150
可怕的启动时间 公司的产品是一个比较大的后台管理系统,而且使用的是webpack3的vue模板项目,单次项目启动时间达到了70s左右 启动个项目吃一碗豆腐脑了,可是没有豆腐脑怎么办,那就优化启动时间吧! 考虑到升级webpack版本的风险还是比较大的,出了一点问题都得找我,想想还是先别冒险,稳妥为主,所以我选择了通过插件来优化构建时间。 通过查阅资料,提升webpack的构建时间有以下几个方向: 多进程处理文件,同一时间处理多个文件 预编译资源模块,比如把长时间不变的库提取出来做预编译,构建的时候直接
Vue 项目性能优化方案
sally18的博客
08-12 2265
前言 Vue 框架通过数据双向绑定和虚拟DOM技术,帮我们处理了前端开发中最脏最累的DOM操作部分,我们不再需要去考虑如何操作DOM以及如何最高效的 操作DOM;但Vue项目中仍然存在项目首屏优化,Webpack编译配置优化等问题, 主要从以下三个方面进行项目优: 1)Vue 代码层面的优化 2)webpack配置层面的优化 3)基础的web 技术层面的优化 一,代码层面的优化 1.1 v-if 和 v-show区分使用场景 v-if 是 真正 的条件渲染,因为它会确保在切换过程中条件块内的
Vue.js 谈谈常见性能优化
qq_39280289的博客
09-25 174
1.编码优化: ​​​​​​不要将所有的数据都放在data中,data中的数据都会增加getter和setter,会收集对应的watcher (vue 2.x 响应式原理Object.defineProperty) vue在 v-for 时给每项元素绑定事件需要用事件代理 (多个子元素绑定事件的场景下,可以把事件帮给父元素(wrapper层),通过e.target事件冒泡抓住事件原来写逻辑) SPA页面采用keep-alive缓存组件 (SPA即单页面应用,通过js切换元素显示与隐藏,不会刷新页面重.
Vue项目常用优化方案
qq_40321355的博客
09-14 494
工作中使用Vue+ElementUI开发后台管理项目 天天跟数据打交道,学到的东西真不多,工作又不好找,emmm,先来说说工作中用到的优化方法吧! 1、路由懒加载 例:const Login = ()=> import('../../Login/Login') 2、keep-alive缓存组件 常用于tab切换的时候使用 3、cdn引入第三方库 这样可以减少项目加载的数据 4、v-for绑定事件使用事件委托 <ul @click='handleClick'> <li v-
Vue-前端优化
zx654729069的博客
04-17 1078
Vue-前端优化 一、添加进度条效果 1.安装 npm install --save nprogress 2.导入 //导入进度条插件 import NProgress from 'nprogress' //导入进度条样式 import 'nprogress/nprogress.css' 3.使用 直接调用 start()或者done()来控制进度条。 NProgress.start(); NProgress.done(); 4.例子 //导入进度条插件 import NProgress from '
学习javascript这一篇就
05-02
学习JavaScript是非常重要的,因为它是一种广泛使用的编程语言,在Web开发领域中占有重要地位。...这篇文章可以提供一些基本概念和知识,但要成为一名优秀的JavaScript开发人员,需要持续学习和改进。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 【面试】以面试者的角度回答Vue中的diff算法(附图示diff运算过程) 5028
  • Cesium开发实战-创建你的第一个Cesium地球 4979
  • JQuery中append和JS中appendChild添加重复元素问题 4443
  • 【优化】Vue项目如何优化?这篇文章就够了!超全优化方面 3844
  • 华为AREngine(Unity版)系列-1.AREngine简介(包含SDK) 2537

分类专栏

  • 华为AREngine(Unity版本) 付费 2篇
  • Cesium开发实战 付费 1篇
  • 3D数学基础 2篇
  • UnrealEngine 3篇
  • EasyAR
  • HoudiniUnityEngine 1篇
  • ARFoundation(ARCore) 6篇
  • CesiumForUnity 1篇
  • 传统前端 5篇

最新评论

  • 华为AREngine(Unity版)系列-2.运行官方WorldAR案例

    qq_21586145: 我想问一下,按照你的步骤,最后发布构建那里,run 为啥没有华为 AR 的选项啊?

  • CesiumForUnity打包Android

    困困狗177: 请问资源是通过token还是本地加载才能打包后也在呢

  • Cesium开发实战-创建你的第一个Cesium地球

    普通网友: 写的很好!我也写了一篇获取【大厂面试真题解析、核心开发学习笔记、最新全套讲解视频、实战项目源码讲义、学习路线简历模板】的文章

  • 华为AREngine(Unity版)系列-2.运行官方WorldAR案例

    weixin_41230052: 请问使用URP会出现黑屏有遇到过吗

  • 【面试】以面试者的角度回答Vue中的diff算法(附图示diff运算过程)

    远枫: 写的真好,肯清楚,谢谢

大家在看

  • 2024 年勒索软件将比以往更加残酷 334
  • 高效数据架构:分表流程实践
  • (055)FPGA时钟--->(005)时钟偏斜 1
  • 深度搜索 copilot 插件 633
  • Python | Leetcode Python题解之第147题对链表进行插入排序

最新文章

  • 2)坐标系(3D数学基础:图形与游戏开发系列教程)
  • 1)什么是3D数学?(3D数学基础:图形与游戏开发系列教程)
  • 2. 新建C++项目并实现HelloWorld(UnrealEngine系列教程-C++基础)
2023年16篇
2021年5篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南宫的CG世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

哆哆女性网姓佳的男孩起名浙江企业网站建设阿里八字算命起名用的好字有啥2020年的鼠宝宝起什么名字好中国周易公司取名网易经起名取名字大全上海排名seo公司无锡制作网站华南seo公司卫生用品公司起名大全上海seo网站优化血战昆仑关袁姓女孩子起人名周易公司起名字吗导火线下载巴弗灭起名最后一个字几声好湖南seo推广黎浅陆天擎全文小说免费阅读十大奢侈珠宝品牌邓姓男人宝宝起名互联网推广与营销学习营销推广广告视频网站建设的过程是什么seo营销题目建筑劳务公司起那些名字好qq起名周易秘义seo谷歌优化淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化