美文网首页
总结我对Vue项目上线做的一些基本优化

总结我对Vue项目上线做的一些基本优化

作者: 不行了快拦住我 | 来源:发表于2020-07-21 09:06 被阅读0次

优先使用vIf

vIf和 vShow理论上都是作用于元素的显示隐藏,只是一个是直接对DOM,一个是通过CSS的 display来操作的,在项目中大部分的时候我都是直接使用 vIf直接代替使用 vShow,只有当DOM频繁进行显示和隐藏的时候,但是这种场景非常少见,我只在信息推送优先级中使用过,项目中一直通过 WebSocket 推的消息进行消息的场景遇到过,频繁推送不同类型的通知。


vFor和vIf不要一起使用

vFor的优先级其实是比 vIF高的,所以当两个指令出现来一个DOM中,那么 vFor渲染的当前列表,每一次都需要进行一次 vIf的判断。而相应的列表也会重新变化,这个看起来是非常不合理的。因此当你需要进行同步指令的时候。尽量使用计算属性,先将 vIf 不需要的值先过滤掉。他看起像是下面这样的。

// 计算属性


computed: {

  filterList: function () {

  return this.showData.filter(function (data) {

    return data.isShow

  })

}

// DOM

<ul>

  <li v-for="item in filterList" :key="item.id">

  {{ item.name }}

  </li>

</ul>

image

vFor key避免使用index作为标识

其实大家都知道 vFor是不推荐使用 index下标来作为 key的值,这是一个非常好理解的知识点,可以从图中看到,当index作为标识的时候,插入一条数据的时候,列表中它后面的key都发生了变化,那么当前的 vFor都会对key变化的 Element重新渲染,但是其实它们除了插入的 Element数据都没有发生改变,这就导致了没有必要的开销。所以,尽量不要用index作为标识,而去采用数据中的唯一值,如 id等字段。

释放组件资源

什么是资源? 每创建出一个事物都需要消耗资源,资源不是凭空产生的,是分配出来的。所以说,当组件销毁后,尽量把我们开辟出来的资源块给销毁掉,比如 setInterval , addEventListener等,如果你不去手动给释放掉,那么它们依旧会占用一部分资源。这就导致了没有必要的资源浪费。多来几次后,可以想象下资源占用率肯定是上升的。

添加的事件

created() {addEventListener('click',Function,false)},beforeDestroy() {removeEventListener('click',Functionfalse)}复制代码

定时器

created() {this.currentInterVal = setInterval(code,millisec,lang)},beforeDestroy() {clearInterval(this.currentInterVal)}复制代码

长列表

项目当中,会涉及到非常多的长列表场景,区别于普通的分页来说,大部分的前端在做这种 无限列表的时候,大部分新手前端都是通过一个 vFor将数据遍历出来,想的多一点的就是做一个分页。滚动到底部的时候就继续请求 API。其实这也是未思考妥当的。随着数据的加载,DOM会越来越多,这样就导致了性能开销的问题产生了,当页面上的DOM太多的时候,难免给我的客户端造成一定的压力,所以对于长列表渲染的时候,建议将DOM移除掉,类似于图片懒加载的模式,只有出现在视图上的DOM才是重要的DOM。网络上有一些很好的解决方案,如 vue-virtual-scroller库等等,大家可以理性的选择。

图片合理的优化方式

图片应该都不陌生吧,在网页中,往往存在大量的图片资源,这些资源或大或小。当我们页面中DOM中存在大量的图片时,难免不会碰到一些加载缓慢的问题,导致图片出现加载失败的问题。网络上大部分都在使用 懒加载的使用方式,只有当 存在图片的DOM出现在页面上才会进行图片的加载,无形中起到了分流的作用,下面就说一套实践的方案吧

小图标使用 SVG或者字体图标

通过 base64和 webp的方式加载小型图片

能通过cdn加速的大图尽量用cdn

大部分框架都带有懒加载的图片,不要嫌麻烦,多花点时间使用它

路由器按需加载

对于路由的懒加载,如果还不会的话,那么就真该好好的重新去学习一下了。路由懒加载的方式有两种,一种是require另一种是 import。当路由按需加载后,那么Vue服务在第一次加载时的压力就能够相应的小一些,不会出现 超长白屏P0问题。下面是两种路由懒加载的写法:

// require法component:resolve=>(require(['@/components/HelloWorld'],resolve))// importcomponent:()=>import('@/components/HelloWorld')复制代码

UI框架使用方式

确保在使用UI框架如, Element, And Design等UI框架的时候,都使用官方给暴露出来的按需加载组件。只有真正用到它的时候时候才会加载当前UI框架的组件,而不是一开始就将整个组件库给加载出来,我们都知道,一个UI框架其实很大,相对比其他的东西来说。因此,它在方便我们开发者的同时,也无形中产生了多余的开销。但是项目周期开发的时候,不得不依赖它。所以建议尽量的使用按需加载。合理的对项目进行止损,如果你不在意,非常嫌麻烦,那么可以进行全局引入。

import{ Button }from'xxxx复制代码

首屏优化

众所周知,第一次打开Vue的时候,如果你的项目够大,那么首次加载资源时,会非常的久。由于资源没有加载完毕,界面的DOM也不会渲染,会造成白屏的问题。用户此时并不知道是加载的问题,所以会带来一个不好的体验。因此通常会在public下写一个加载动画,告诉用户,网页在加载中这个提示。当页面加载成功后,页面渲染出来的这一个体验比白屏等开机要好太多了。因此,推荐大家都设计一个自家公司的loading加载方式放入index.html中吧。

项目过程

最小化JS文件

可以通过webpack处理打包的JavaScript文件,让其更加的精简。在配置中,你可以这么做

config.optimization.minimize(true);复制代码

图片资源压缩

可以通过 image-webpack-loader插件对打包的图片进行压缩,看起来会对图片的加载有一些提升。如果担心破坏图片,可以放弃使用它。

$ yarn add  image-webpack-loader

- - QAQ

config.module.rule('images').use('image-webpack-loader').loader('image-webpack-loader').options({bypassOnDebug:true}).end()复制代码

打包公共代码

在 webpack4中,可以通过 optimization.minimize将公共代码进行打包,虽然我个人认为这个东西对SPA应用来说,效果其实有限,但有胜于无,文字再小也是肉不是,所以说,在细节的把控上,永远是无止境的。但是在webpack4中也是将CommonsChunkPlugin 改用 SplitChunksPlugin 了。感觉评论掘友的提醒。

newwebpack.optimize.CommonsChunkPlugin({name: ['vendor','runtime'],filename:'[xxxxx].js'})复制代码

删除沉淀代码

使用 Tree-Shaking插件可以将一些无用的沉淀泥沙代码给清理掉。

依赖库CDN加速

看到有小伙伴使用CDN的方式引入一些依赖包,觉得非常的 Nice,然后我也开始使用了。我将 VueAxiosEcharts等等都分离了出来,在正式环境下,通过CDN,确实有了一些明显的提升,所以说大家可以进行尝试。

CDN LinkDI地址:BootCDN

// 在html引入script标签后。在vue的配置中,进行声明configureWebpack: {externals: {'echarts':'echarts'// 配置使用CDN}}复制代码

GZIP

这个东西需要后端进行配置,当然,如果你有操作 Nginx的权限的话,那么可以自己开启,反正我认为,这个东西提升还是很大的。具体的可以看这篇文章。这里不过多赘述这个东西。 Vue CLI 2&3 下的项目优化实践 —— CDN + Gzip + Prerender

后话

下面推荐一些优化的文章,我个人觉得非常有用的

还在看那些老掉牙的性能优化文章么?这些最新性能指标了解下

前端性能优化指南[6]--Web 性能标准

浅谈 webpack 性能优化(内附巨详细 webpack 学习笔记)

https://juejin.im/post/5f0f1a045188252e415f642c

相关文章

  • 总结我对Vue项目上线做的一些基本优化

    优先使用vIf vIf和 vShow理论上都是作用于元素的显示隐藏,只是一个是直接对DOM,一个是通过CSS的 d...

  • vue 性能优化点

    vue项目中,经常会遇到一些性能优化点,以下就是我在工作中,总结的优化点 vue 性能优化点 1,路由懒加载 2,...

  • APP开发中我们需要去优化哪些方面?

    最近项目上线,需要做优化,之前也没怎么接触过优化那块,所以把自己的一些总结在复盘下,给大家分享下做优化的方面共同探...

  • Vue项目上线--优化

    项目拖了这么久终于差不多要上线了,记录一下Vue项目的一些优化。 1. 去掉打包后的.map文件 运行npm ru...

  • 发布和上线流程

    新人入职,对项目组的上线规则和遇到的问题做总结! @important! 对待上线要有敬畏心理,上线需谨慎!!! ...

  • 基于 SSR/SSG 的前端 SEO 的优化

    前言 前段时间对项目做了 SEO 优化,到现在才来写总结。我们知道,常规用 Vue/React 开发的是 SPA ...

  • Vue3 + Vite +TS 项目问题总结

    最近做的几个Vue项目基本都收尾了,总结一下在项目中遇到的问题,希望能帮助遇到同样问题的小伙伴项目情况:我做的项目...

  • 重载 print 函数提高性能

    原文链接: 重载 print 函数提高性能 最近项目准备要上线了, 到了性能优化的阶段, 看了一些文章之后, 基本...

  • 一个精简的react demo

    今天一个react项目基本上完成了,因为之前公司做的项目用的是vue全家桶,基本上对vue已经基本掌握,所以用re...

  • vue 项目优化总结

    1、配置 webpack-bundle-analyzer 插件 2、分析 2.1、路由懒加载 把不同路由对应的组件...

网友评论

      本文标题:总结我对Vue项目上线做的一些基本优化

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