项目的性能优化

4 篇文章 0 订阅
4 篇文章 0 订阅

图片的优化

  • base64

首先盲目使用base64并不能带来性能的优化,首先图片转成base64之后,体积会增大1/3,虽然减少了图片带来的http请求,但如果base64体积过大,会造成css文件体积臃肿,css文件的体积直接影响渲染,导致用户会长时间注视空白屏幕。html和 css会阻塞渲染,而图片不会,适得其反。在webpack配置上,默认图片转成base64的体积一般都是1k以内,所以对小图进行base64转码是优化http请求,保证页面加速渲染,加快页面加载速度。

  • svg

小图除了可以使用base64之外,还能使用svg格式的文件来取代图形字体存在本地,其中svg的效果更优,因为是矢量图不易失真,且相较于icon-font只能是单色和容易受line-height等样式影响的缺点,svg能随意调整图片大小,以及自定义颜色。

  • CDN

对于大图来说可以将其挂到项目的图片CDN域名下,它是专门为图片做优化的,通常包含缩放、格式转换等。可以把它看成是一个API,通过传入尺寸、质量、格式等参数,获取到对应的图片内容。(CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术)

  • webp

WebP是Google在2010年开发的一种文件格式。它在保持图像质量不变的同时,为图像提供了更高的压缩率,可以节省更多的带宽。(与PNG相比,无损WebP压缩图像最多可提高26%),目前存在的问题是有些浏览器(Safari和IE)不支持该webp格式,可以使用WebP Express插件使用WebP转换库来更改图像。该插件用作转换器,可为支持此格式的浏览器生成WebP,向不支持该格式的浏览器显示JPG或PNG。还有本地手动判断能否使用webp格式的方法:(1)Google官方文档是这样处理的(先加载一个WebP图片,如果能获取到图片的宽度和高度,就说明是支持WebP的,反之则不支持)(2)在服务端根据请求header信息判断浏览器是否支持webp,在图片请求发出的时候,Request Headers 里有 Accept,服务端可以根据Accept 里面是否有 image/webp 进行判断。

react里面能做的优化

  • 从生命周期来看,可以在shouldComponentUpdate里面进行浅比较,来决定是否渲染。其中对于类组件,可以使用pureComponent,对于函数组件,可以使用memo,来自动实现对传入的props,state的浅比较。
  • 在constructor中去绑定函数的指向,而不是在事件声明时绑定或者使用匿名的函数式声明事件,因为这些都会在render中再次执行,
  • 循环中加入的key值使用唯一值而不是下标,因为下标有可能改变,而导致同样的组件的key值改变,使用唯一值能有效提高diff算法比对新旧树时的性能。
  • 提交表单时候进行防抖处理

第三方库/浏览器方面的优化

  • 虚拟列表

虚拟列表其实是按需显示的一种实现,即只对可见区域进行渲染,对非可见区域中的数据不渲染或部分渲染的技术,从而达到极高的渲染性能。

虚拟列表的实现,实际上就是在首屏加载的时候,只加载可视区域内需要的列表项,当滚动发生时,动态通过计算获得可视区域内的列表项,并将非可视区域内存在的列表项删除。

  • webworker

JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。

在主线程运行的同时,worker线程也在运行,相互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。这样做的好处是主线程可以把一些计算密集型或高延迟的任务交给worker线程执行,被 Worker 线程负担了,这样主线程(通常负责 UI 交互)就会很轻松流畅,不会被阻塞或拖慢。

而且Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该注意及时关闭

worker线程的使用有一些注意点:

(1)同源限制:分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。

(2)文件限制:为了安全,Worker 线程无法读取本地文件,即不能打开本机的文件系统(file://),它所加载的脚本必须来自网络,且需要与主线程的脚本同源。

(3)DOM操作限制:worker线程在与主线程的window不同的另一个全局上下文中运行,其中无法读取主线程所在网页的DOM对象,也不能获取 documentwindow等对象,但是可以获取navigatorlocation(只读)XMLHttpRequestsetTimeout等浏览器API。

(4)通信限制:worker线程与主线程不在同一个上下文,不能直接通信,需要通过postMessage方法传递消息来通信。

(5)脚本限制:worker线程不能执行alertconfirm,但可以用 XMLHttpRequest 对象发出ajax请求。

webpack的优化

如何检测性能优化

使用浏览器自带的performance,通过录制操作,得出性能数据,会呈现出帧率统计、消息时间轴、函数调用栈等信息,以及各种时间的比例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3项目性能优化可以从多个方面入手。其中一种方法是利用计算属性的缓存机制来避免重复计算。计算属性允许我们定义一个属性,该属性的值是基于其他响应式属性的计算结果。在Vue 3中,计算属性的缓存是通过将计算结果保存在缓存中,只有在依赖的属性发生变化时才重新计算。这样可以避免不必要的计算,提高性能。例如,在组件的`created`生命周期钩子中访问计算属性时,只有在第一次访问时才会对计算属性进行求值,后续的访问会直接返回缓存的值。 另一种性能优化方法是使用分批运行组件的算法。这种算法可以在组件渲染时将渲染任务分批进行,以避免一次性渲染过多的组件导致性能问题。在Vue 3中,可以通过使用`v-if`指令结合自定义方法来控制组件的渲染优先级。例如,可以根据`displayPriority`的值来决定是否渲染某个组件,同时利用`requestAnimationFrame`来分批执行渲染任务,以减少性能压力。 此外,合理使用`v-for`指令也是Vue 3项目性能优化的一种方法。在使用`v-for`指令时,应尽量避免在循环中使用复杂的计算或访问其他组件的数据。根据Vue官方的风格指南,应该将循环中的计算或访问其他组件的数据尽量提前处理,并将结果保存在响应式属性中。这样可以减少在模板中的计算量,提高渲染性能。 综上所述,Vue 3项目性能优化可以通过合理利用计算属性的缓存机制、使用分批运行组件的算法以及优化`v-for`指令的使用来实现。这些方法可以有效地提高项目的性能,提升用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值