首页 > 其他分享 >前端性能优化(一)---时间角度优化:减少耗时

前端性能优化(一)---时间角度优化:减少耗时

时间:2022-08-30 17:47:32浏览次数:65  
标签:请求 渲染 --- 耗时 页面 优化 加载

一、为什么要进行性能优化

对于一个产品来说,用户的体验是最重要的。当页面加载时间过长,交互操作不流畅时,会给用户带来很糟糕的体验,会导致用户流失。

二、前端常见的性能优化手段

对于前端来说,性能优化可以从两个大方面来解决。本篇详述第一种:减少耗时。

2.1.时间角度优化:减少耗时(用户的等待时长)

页面加载耗时、渲染耗时、网络耗时、脚本执行耗时

2.2.空间角度优化:降低资源占用(页面卡顿或者卡死)

CPU占用、内存占用、本地缓存占用

 三、浏览器页面加载过程

减少耗时的性能优化与浏览器的页面加载过程紧密联系。浏览器页面加载过程分为以下几个步骤:

  1. 网络请求,服务端返回HTML内容。
  2. 浏览器一边解析HTML,一边进行页面渲染。
  3. 解析到外部资源,会发起HTTP请求,加载JavaScript代码时会暂停页面渲染。
  4. 根据业务代码加载过程,会分别进入页面开始渲染、渲染完成、用户交互等阶段。
  5. 页面交互过程中,会根据业务逻辑进行逻辑运算、页面更新。

四、耗时优化---网络请求优化

网络请求优化:减少网络资源的请求和加载耗时

4.1.减少DNS查询时间

使用浏览器的DNS缓存、计算机DNS缓存、服务器DNS缓存。

4.2.合理的使用CDN,有效的减少网络请求耗时

4.3.对请求资源进行缓存

包括但不限于使用浏览器缓存、HTTP缓存、后台缓存,使用Service Worker、PWA等技术。

4.4.移除代码中无用的部分

使用Tree-shaking、代码分割、移除用不上的依赖项等。

4.5.对请求资源进行合理的拆分

(CSS、JavaScript脚本、图片/音频/视频等),减少请求资源的体积。

4.6.对资源进行压缩,减少传输数据的大小

4.7.使用HTTP/2、HTTP/3,提升资源请求速度(一般效果不是特别明显)

4.8.对请求进行优化

多个请求可以进行合并、减少通信次数;对请求进行域名拆分,提升并发请求数量。

五、耗时优化---首屏加载优化

请求资源返回后,浏览器会进行解析和加载,这个过程会影响页面的可见时间,通过对首屏加载的优化,可以有效的提升用户体验。

将页面内容尽快展示给用户,减少页面白屏时间,优化方案主要包括加载耗时优化+使用页面过渡效果。

5.1.加载耗时优化(性能和渲染耗时优化)

5.1.1.对页面进行分片/分屏加载,将页面可见/可交互时间提前。

5.1.2.优化资源加载的顺序和粒度,仅加载需要的资源,通过异步加载方法加载剩余资源

5.1.3.使用差异化服务,如,读写分离,对于不同场景按需加载所需要的模块。

5.1.4.使用服务器直出渲染(SSR),减少页面二次请求和渲染的耗时。

5.1.5.使用秒看技术,通过预览方式(如,图片)提前将页面内容提供给用户。

5.1.6.配合客户端进行资源预请求和预加载,如,使用预热Web容器。

5.1.7.配合客户端将资源和数据进行离线,可用于下一次页面的快速渲染。

5.2.使用页面过渡效果

使用页面过度效果可能更倾向于产品策略。很多时候,产品策略的调整给用户带来的体验优化效果不亚于技术手段优化。因此也需要重视。

常见的页面过渡效果方案,如下两种:

5.2.1.使用骨架屏进行预渲染

5.2.2.使用过渡动画让用户感知到页面正在顺利加载。

总结:从而避免用户对于白屏页面或者静止页面产生烦躁或者困惑。

六、耗时优化---渲染过程优化

用户在浏览器页面过程中,也会触发页面的二次运算和渲染,此时需要进行渲染过程的优化。

渲染过程优化,主要是减少用户的操作等待时间,避免出现卡顿或者卡死的情况。

6.1.使用资源预加载,在空间时间,提前将用户可能需要用到的资源进行获取并加载。

6.2.减少DOM数量,减少/合并DOM操作,减少浏览器渲染过程中的计算耗时。

6.3.通过合理利用浏览器的GPU合成,提升浏览器渲染效率。

6.4.使用离屏渲染,在页面不可见的地方提前进行渲染(如,Canvas渲染)。

6.5.通过将页面渲染帧率保持在60FPS左右,提升页面交互和渲染的流畅度。

除了上述5种方式以外,渲染过程同样可以使用页面过渡效果动画方式,例,在加载中,给到用户及时反馈,来提升用户的体验。

七、耗时优化---计算/逻辑运行提速

对于运算逻辑复杂、计算量较大的业务逻辑,需要进行计算/逻辑运行提速。

7.1.通过将JavaScript大任务进行拆解+并行计算的方式,有效的降低整体计算耗时,如,使用Web Worker。

7.2.通过使用运行效率更高的方式来减少计算耗时,如,使用Webassembly。

7.3.通过将计算过程提前,减少计算等待时长,如,使用AOT技术。

7.4.通过使用更优的算法或存储结构,提升计算效率,如,VSCode使用红黑树优化文本缓冲区的计算。

7.5.通过将计算结果缓存的方式,减少运算次数。

八、总结

1.在前端性能优化实践中,网络请求优化和首屏加载优化,使用频率最高,不管项目规模如何,各个模块和逻辑是否复杂,这两个方向的耗时优化,都是比较通用的。

2.相比之下,对于页面内容较多、交互逻辑、运算逻辑复杂的项目,才需要针对性的渲染过程优化和计算/逻辑运行提速。

标签:请求,渲染,---,耗时,页面,优化,加载
From: https://www.cnblogs.com/pwindy/p/16639809.html

相关文章

  • SMINet State-Aware Multi-Aspect Interests Representation Network for Cold-Start
    动机本文是2022年AAAI上的一篇论文。在线旅行平台与常见的电商平台、新闻平台与短视频平台不同,因为通常用户旅行的频率远不及网购、看新闻的频率,而且旅行有一些与众不同的......
  • 前端性能优化(二)---空间角度:降低资源占用
    一、为什么要进行性能优化对于一个产品来说,用户的体验是最重要的。当页面加载时间过长,交互操作不流畅时,会给用户带来很糟糕的体验,会导致用户流失。二、前端常见的性能优......
  • 兼容树莓派引脚定义,适配多种模块--米尔百变STM32MP1开发板演示
    大家好,我是米尔的工程师,今天给大家带来一款全新的米尔板卡标杆产品:MYD-YA15XC-T。今天的文章将分成两部分来介绍这块基于STM32MP1处理器开发的板卡。一、百变开发板MYD-Y......
  • OLW代码着色测试-java代码
    privatestaticvoidDoctor_checkStatus(CommodityMappercommodityMapper){ Shared.printTestClassEndInfo(); Map<String,Object>params=newHashMap<Strin......
  • vue-cli安装错误的记录
    错误是由于想升级vue-cli引起的npmERR!Invalidtagname"@vue-cli":TagsmaynothaveanycharactersthatencodeURIComponentencodes.  仔细一看npminstal......
  • pytest框架(九)--视频知识点补充
    Pytest知识点补充编写用例时常用的异常处理方法:*try....except1(异常类型)/except2...finally:*pytest.raises():deftest_raise():withpytest.raises((ZeroDivi......
  • 序列化器:反序列换-字段选项 validate validate_<字段> validator
    1.使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。2.在获取反序列化的数据前,必须调用is_valid()方法进行验证,验证成功返回Tr......
  • CSS 基础 - 结构
    CSS基础-结构记得我在我的文章中提到的HTML基础-结构最高级的结构将由CSS处理的文章?嗯,就是这样。Photoby设计公司on不飞溅正如我之前提到的,HTML的't......
  • IP-guard主服务器安装
    IP-guard主服务器安装一、所需环境安装Windowsserver2016安装SQL2017准备ip-guard主服务器安装包提前设置好服务器名称和静态ip地址,关闭防火墙或者开启所需端口:8235......
  • 阅读《计算机图形学编程(使用OpenGL和C++)》12 - 光照
    现在最常见的光照模型称为“ADS”模型,因为它们基于标记为A、D和S的3种类型的反射。●环境光反射(Ambientreflection)模拟低级光照,影响场景中的所有物体。●漫反射(Diffuse......