Web前端性能优化思路

article/2025/10/1 20:12:34

本文旨在整理常见Web前端性能优化的思路,可供前端开发参考。因为力求精简,限于篇幅,所以并未详述具体实施方案。

基于现代Web前端框架的应用,其原理是通过浏览器向服务器发送网络请求,获取必要的index.html和打包好的JS、CSS等资源,在浏览器内执行JS,动态获取数据并渲染页面,从而将结果呈现给用户。

在这个过程中,有两个步骤可能较为耗时,一个是网络资源的加载,另一个是浏览器内代码执行和DOM渲染。

而耗时的增加会导致页面响应慢,卡顿,影响用户体验。

针对上述两种耗时的情况,常见的优化方向有:

  1. 缩短请求耗时;
  2. 减少重排重绘;
  3. 改善JS性能。

1 缩短请求耗时

网络资源是Web应用运行的基础,改善网络资源加载速度会显著改善前端性能。

1.1 优化打包资源

总体原则: 减少或延迟模块引用,以减少网络负荷。

常用工具:

  • webpack
  • webpack-bundle-analyzer可视化分析工具

常用方法:

  • 减小体积:减少非必要的import;压缩JS代码;配置服务器gzip等;使用WebP图片;
  • 按需加载:可根据“路由”、“是否可见”按需加载JS代码,减少初次加载JS体积。比如可以使用import()进行代码分割,按需加载;
  • 分开打包:利用浏览器缓存机制,依据模块更新频率分层打包。

其他方法:

  • 雪碧图:每个HTTP/1.1请求都是独立的TCP连接,最大6个并发,所以合并图片资源可以优化加载速度。HTTP/2已经不需要这么做了。

1.2 CDN加速

总体原则: 通过分布式的边缘网络节点,缩短资源到终端用户的访问延迟。
常用工具:

  • Cloudflare
  • AWS CloudFront
  • Aliyun CDN

常用方法:

  • 加速图片、视频等大体积文件

1.3 浏览器缓存

**总体原则:**避免重复传输相同的数据,节省网络带宽,加速资源获取。

常用方法:
可以通过设置HTTP Header来控制缓存策略,一般有如下几种。

  • 强缓存

  • Expires:HTTP/1.0

  • Cache-Control:HTTP/1.1

  • 协商缓存

  • ETag + If-None-Match

  • Last-Modified + If-Modified-Since

拿ETag举例,如果浏览器给的If-None-Match值与服务端给的ETag值相等,服务器就直接返回304,从而避免重复传输数据。

ETag示例:

如果几个配置同时存在,则优先级为:Cache-Control > Expires > ETag > Last-Modified

1.4 更高版本的HTTP

**总体原则:**使用高版本HTTP提升性能。

常用工具:

  • HTTP/2

HTTP/2较HTTP/1.1最大的改进在于:

  • 多路复用:单一TCP连接,多HTTP请求,有Demo;
  • 头部压缩:减少HTTP头体积;
  • 请求优先级:优先获取重要的数据;
  • 服务端推送:主动推送CSS等静态资源。

其他方法:

  • HTTP/3

HTTP/3基于UDP,有很多方面的性能改进,如多路复用无队头阻塞,响应更快。感兴趣的同学可参考Wiki。

1.5 Web Socket

**总体原则:**解决HTTP协议无法实时通信的问题。

Web Socket是一条有状态的TCP长连接,用于实现实时通信、实时响应。

1.6 服务器端渲染(SSR)

**总体原则:**第一次访问时,服务器端直接返回渲染好的页面。

一般流程:

  • 浏览器向 URL 发送请求;
  • 服务器端返回“空白”index.html
  • 浏览器不能呈现页面,需要继续下载依赖;
  • 加载所有脚本后,组件才能被渲染。

SSR流程:

  • 浏览器向 URL 发送请求;
  • 服务器端执行JS完成首屏渲染并返回;
  • 浏览器直接呈现页面,然后继续下载其他依赖;
  • 加载所有脚本后,组件将再次在客户端呈现。它将对现有View进行合并。

常用工具:

  • Node.js,用于服务器端执行代码,输出HTML给浏览器,支持所有主流前端框架
  • Next.js,用于服务器端渲染React的框架
  • gatsby,用React生成静态网站的工具

除了可以提升页面用户体验,还能应用于SEO。

2 减少重排重绘

除了网络资源以外,另一个影响前端性能的因素就是前端页面的渲染绘制效率。

虽然不同的前端框架有一些差异,但整体的优化思路是一致的,这里将以React举例。

2.1 减少渲染量

**总体原则:**不渲染未展示的部分。

常用工具:

  • react-window
  • react-loadable
  • JS原生,如IntersectionObserver
  • 框架提供,如React.lazyreact-intersection-observer

常用方法:

  • 虚拟列表:只渲染可见区;
  • 惰性加载:无限滚动;
  • 按需加载:页面只在切换过去时才加载。

以虚拟列表举例,以下是使用react-window库,仅仅渲染了可见区的数据:

2.2 减少渲染次数

**总体思路:**避免重复的渲染。

常用工具:

  • lodash
  • JS或框架自带

常用方法:

  • 防抖与节流;
  • 对于React函数组件来说,合理使用副作用,拆分无关联的副作用;
  • 对于React类组件来说,可以使用shouldComponentUpdate或使用PureComponent来优化渲染;
  • 利用缓存,如React.memo;
  • 使用requestAnimationFrame替代setInterval执行动画。

3 改善JS性能

因为浏览器是单线程异步模型,长时间的运算会阻塞渲染过程,所以改善复杂运算有助于改善前端的整体性能。

3.1 缓存复杂计算

**总体思路:**避免重复计算。

常用方法:

  • 对于React函数组件来说,可以使用useMemo缓存复杂计算值。

举例如下,memoizedValue需要经过复杂计算才能得到,此时就可以使用useMemo缓存,仅仅在输入参数发生变化时才重新计算,避免计算阻塞页面渲染,从而避免页面卡顿。


1const MyFunctionalComponent = () => {
2 const memoizedValue = useMemo(() => {
3   computeExpensiveValue(a, b);
4 }, [a, b]);
5
6 return <AComponent value={memoizedValue}/>;
7}

useMemo自身也有性能消耗,需要视情况使用,某些场景可以利用React的渲染机制避免性能问题,可以参考《Before You memo()》。

3.2 Web Worker

**总体原则:**多线程思想。

常用方法:

  • Dedicated Workers,处理与UI无关的密集型数学计算:大数据集合排序、数据压缩、音视频处理;
  • Service Worker,服务端推送,或者PWA中配合CacheStorage在前端控制缓存资源;
  • Shared Worker,Tab间通信。

JS语言在设计之初就是单线程异步模型,好处是可以高效处理I/O操作,但坏处是无法利用多核CPU。

Web Worker会启动系统级别的线程,可进行多线程编程,发挥多核的性能。

3.3 Web Assembly

**总体原则:**将复杂的计算逻辑编译为Web Assembly,避免JS类型推断过程中的性能开销,可用于性能的极限优化。

适用范围有限:

曾在网上看到,有人使用自顶向下非优化的斐波那契数列算法来举例,说Web Assembly比原生JS快一倍,实测之后似乎也没有。

在同一台机器测试,其中求第48个值的耗时如下:

  • C(Ubuntu+GCC):18s
  • JS(V8):32s
  • Web Assembly(V8+EMCC):39s

一种可能的猜想是,斐波那契计算中没有大量的类型推断,而且V8内部有一些优化机制,使得此处JS执行速度快于Web Assembly。

简而言之,并非所有场景都适用于Web Assembly。

另一种运用场景是,把不同语言编写的代码(C/C++/Java等)编译为Web Assembly,能以接近原生的速度在Web中运行,并且与JS共存。

总结

导致前端性能问题的因素是多方面的。

如果是前端资源加载慢,导致页面慢,则应该考虑如何缩短请求耗时。而如果是前端页面逻辑笨重,UI数据量太大,则可以试着从减少重排重绘的角度去优化。对于耗时长的复杂计算,缓存计算结果往往是见效较快的优化方式。

最后需要注意的是,在实际应用开发过程中,因为受限于开发成本,所以需要平衡优化所花的代价与其对应产生的成效。可以有针对性地对性能瓶颈进行分析和处理,同时也需要避免引入不必要的优化措施,以确保最终优化效果。


文/Thoughtworks严文
原文链接:https://insights.thoughtworks.cn/web-frontend-performance-tuning/
更多精彩洞见,请关注微信公众号Thoughtworks洞见。


http://chatgpt.dhexx.cn/article/7cFYkZ3l.shtml

相关文章

多传感器融合定位技术

由于 GNSS定位信息更新频率低&#xff0c;不能满足自动驾驶中实时性的要求&#xff0c;且定位信号会 因隧道、建筑群等障碍物的遮挡而中断。而INS中配备高频传感器&#xff0c;一定时间内可以提供连续的较高精度的汽车位置、速度和航向信息&#xff0c;但其定位误差会随着系统运…

室内定位技术及机场方案建议

室内定位技术发展现状 在1996年左右&#xff0c;美国联邦通信委员会&#xff08;FCC&#xff09;要求移动运营商为移动电话用户提供E-911&#xff08;紧急救援&#xff09;服务。1999年&#xff0c;FCC又对定位精度做出新的要求。加之此后全球移动用户的迅猛发展&#xff0c;很…

RTK定位技术原理

RTK即载波相位差分技术&#xff0c;rtk定位能够实时地提供测站点在指定坐标系中的三维定位结果&#xff0c;并达到厘米级精度。 普通GPS的定位精度大于1米&#xff0c;信号误差有50%的概率会达到2米以上。另外&#xff0c;GPS无法支持精准定高&#xff0c;误差可能高达十几米。…

5G+北斗融合定位技术介绍

5G是具有高速率、低时延和大连接特点的新一代宽带移动通信技术。5G移动通信技术会更加注重用户的使用体验,交互式游戏、3D技术、虛拟实现、传输延时、网络的平均吞吐速度以及各方面能效是检验5G性能的主要考量指标。 基于4G的蜂窝定位&#xff0c;受信号带宽、同步以及网络部署…

10种室内定位技术原理深度解析

在高度城市化的今天&#xff0c;室内空间越来越庞大复杂。人类战胜了大自然&#xff0c;却在自己构筑的钢筋水泥中迷了路。 东晋高僧法显西行求法乘船回国时写道&#xff1a;大海弥漫无边&#xff0c;不识东西&#xff0c;唯望日、月、星宿而进。大意就是说&#xff0c;大海辽…

5G对定位技术的影响

我们为您带来一些有关5G对定位技术的影响的有趣事实。我们为什么决定通知您有关此主题的信息&#xff1f;好吧&#xff0c;定位技术是5G发展中最有趣的领域。在现代世界中&#xff0c;这意味着5G正在加速发展&#xff0c;带来了改善和加快定位技术的全新技术。4G已成为过去。现…

室内定位技术之UWB篇

关注、星标公众号&#xff0c;直达精彩内容 来源&#xff1a;网络素材 伴随通信行业的发展和物联网行业的兴起&#xff0c;室内定位技术因强大的定位能力&#xff0c;迎来了发展的黄金时期。并且对于定位精度高&#xff0c;抗干扰能力要求高的应用场合&#xff0c;UWB定位技术应…

常见无线定位技术的基本原理

目录 引言无线电定位技术TOA技术TDOA技术RTT技术RSS技术AOA技术混合估计技术 引言 无线定位技术是依据测量出的无线电磁波的特征参数&#xff0c;利用相应位置解算方法来确定目标位置的技术。依据地面基站是否发射电磁波信号&#xff0c;可以把定位技术分为有源定位和无源定位…

室内定位常用定位技术_米级蓝牙定位方案,厘米级UWB定位方案

前言 随着物联网生态链逐渐走向成熟&#xff0c;各行各业对定位的需求也大大增加。由于GPS卫星信号在室内无法定位&#xff0c;且容易受到各种无线电信号的干扰&#xff0c;为实现“最后一公里”的室内位置服务&#xff0c;目前主流的室内定位你技术多依赖于热门的无线通信技术…

移动机器人室内定位技术综述

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 对于移动机器人&#xff0c;定位技术是保证移动机器人轨迹/运动作业的前提技术&#xff0c;特别是跟踪作业的基础。 与自动驾驶车辆定位不同&#xff0c;小型移动机器人…

物联网四大定位技术

物联网&#xff0c;是指物物都相连的互联网技术&#xff0c;是信息技术的重要构成部分。物联网主要用于网络的融合中&#xff0c;通过智能感知和识别技术来实现物品和物品之间的信息交流。下面小编就跟大家介绍一下物联网四大定位技术吧&#xff01; 物联网四大定位技术介绍 一…

万字详解自动驾驶定位技术

文章目录 车路协同自动驾驶1 高精度地图1.1 高精度地图定义及价值1.1.1 高精度地图的分层结构1.1.2 高精度地图对自动驾驶的价值1.1.3 高精度地图行业现状 1.2 高精度地图关键技术1.2.1 道路元素[图像处理](https://so.csdn.net/so/search?q图像处理&spm1001.2101.3001.70…

无线定位技术概述

FROM http://labs.chinamobile.com/mblog/712208_82886 阎啸天于蓉蓉武威 &#xff08;中国移动通信有限公司研究院业务所&#xff09; 摘 要介绍了位置信息和定位性能分析指标等基本概念&#xff0c;根据定位原理与策略的差异对各种定位方法进行分类&#xff0c;概要阐述和…

自动驾驶--定位技术

[整理自百度技术培训中心课程](https://bit.baidu.com/products?id70) 为什么无人车需要精确的定位系统 在地下车库实现自动泊车的一个非常关键的技术是什么呢&#xff1f;那就是定位技术。 为什么无人车需要一个精确的定位系统。为什么无人车需要精确的定位系统&#xff…

UWB定位技术

什么是UWB 超宽带&#xff08;Ultra Wide-Band&#xff0c;UWB&#xff09;是一种新型的无线通信技术&#xff0c;它主要用于低功耗数据快速传输以及室内静止或移动物体/人的定位跟踪与导航。 UWB技术传输速率高&#xff08;速率最高可达1000Mbps以上&#xff09;、发射功率较…

惯性导航定位技术

1 惯性导航定位技术介绍 惯性是所有质量体本身的基本属性。建立在牛顿定律基础上的惯性导航系统不与外界发生任何光电联系&#xff0c;仅靠系统本身就能对汽车进行连续的三维定位和三维定向。 由于惯性导航系统这种能自主地、隐蔽地获取汽车完备运动信息的优势是诸如 GNSS等其…

物联网定位技术超全解析

早在15世纪&#xff0c;当人类开始探索海洋的时候&#xff0c;定位技术也随之催生。当时的定位方法十分粗糙&#xff0c;就是运用航海图和星象图以确定自己的位置。 随着社会的进步和科技的发展&#xff0c;定位技术在技术手段、定位精度、可用性等方面均取得质的飞越&#xf…

物联网-UWB定位技术

一、UWB定位简介 1 UWB信号特征 传统通信方式使用的是连续波信号&#xff0c;即本地振荡器产生连续的高频载波。对于需要传送的信息通过一定的调制方式&#xff08;如调幅&#xff0c;调频等方式&#xff09;加载于载波之上&#xff0c;通过天线进行发送。现在的无线广播&…

定位技术

无线定位方法是指分析接收到的无线电波信号的特征参数&#xff0c;然后根据特定算法计算被测对象的位置&#xff08;二维/三维坐标&#xff1a;经度、纬度、高度&#xff09;。常用的无线定位方法有如下几种&#xff1a;信号强度分析法&#xff08;RSS&#xff09;、到达角度定…

常见的定位技术主要有哪些?

目前&#xff0c;常见的定位技术主要有&#xff1a;蓝牙、RFID、WIFI、超宽带(UWB)、超声波等。智物达“智寻”超宽带(UWB)定位系统是一种以极低功率在短距离内高速传输数据的无线定位技术。 UWB技术 超宽带(UWB)无线定位技术由于功耗低、抗多径效果好、安全性高、系统复杂度…