随着 Web 应用的不断发展,前端性能优化
逐渐成为移动端和 PC 端开发的必修课,而在真实的业务场景中,优化把控在毫秒之间,不同维度的优化需要不同专业领域和技术功底的结合,才能真正做到精益求精,不断提升页面性能。
那么,前端性能优化有哪些层面的优化点?又可以从哪些方面做进一步提升呢?
Web 应用的性能瓶颈往往出现在“三军未动粮草先行”的两个方面:首先是 Web 应用所需的资源数量,以及每个资源的请求大小。这是因为 HTTP
协议本身的限制,它采用了明文的方式传输数据,而不可避免的产生了一些性能瓶颈。
那么,在网络性能优化方面,我们可以从以下几个方面着手:
在 Web 开发过程中,我们可以通过 HTML
、CSS
、JavaScript
以及 JSON
等资源的压缩,减少下载的时间和传输流量,同时,通过对这些压缩资源的缓存,可以进一步提高用户的访问速度。
Web 开发中的优化经验告诉我们,在资源合并这一点上做的越好,能够减少很多重复请求产生的延迟。因此,在项目中,需要采取一些 合并资源
的策略,比如,将多个 CSS
或 JS
文件合并成一个,减少 HTTP 请求,加快页面的加载速度,缩短浏览器的响应时间。
使用 CDN
可以更快地传送内容,同时降低成本。CDN 的核心优势在于每个访问者都下载了最接近他们的物理位置的内容,这大大缩短了文件下载的时间和 latency
(延迟),优化了网络连接层,加速了整个网站的访问速度。
在网络性能达到最优的情况下,我们可以从以下三方面来进一步优化页面渲染性能。
选择合适的图片格式和大小
,避免过大或者过小的图片出现不清晰的情况,特别是在移动设备上优化图片,减少下载时间和占用空间。WebP 格式
是一种结合了 JPEG
,PNG
,GIF
优点于一身的一种新型图片格式,它有更好的压缩效果,同时对于中大型图片的加载启动会有更好的优化,可以大大缩短页面的加载时间。总的来说,使用 WebP
格式可以有效地优化页面的渲染性能。在移动端网页的图片展示中,图片懒加载思想
就几乎成了通用规范。如果页面中需要展示大量图片的话,完全一开始打开页面时把所有的图片都加载是很浪费资源且影响页面的加载速度,此时可以尝试使用图片懒加载的方式,等到该图片快要出现在屏幕内时再触发加载,进而加快页面渲染速度。
HTML
、CSS
和 JavaScript
的过程中,减少 DOM
元素的数量,优化代码逻辑,减少不必要的计算,尽量减少操作和触发。JavaScript
优化,要尽量减少类和函数的使用,尽量使用原生 JavaScript 内置方法。CSS
优化,可以考虑使用 BEM
等格式化方案等优秀的方法。例如,对于引入的数据,我们可以采用流媒体传输协议(
TCP
),使用React Native
开发原生应用,使用JPEGXR
格式的图片,以及使用WebP
格式的图片等等。并且,在实现过程中,我们可以选择使用webpack
等打包工具和前端库来提高开发的效率
DOM
(例如 JSON 树
的形式),不仅每次操作都会导致大量的重排和重绘,也会消耗大量的性能资源,此时可以采用 DOM 操作的片段化更新方式。也就是将 DOM 结构按照某种方式拆分成若干小块,对其进行更新。这样,可以实现精细化操作,减少不必要的资源消耗。JavaScript 优化是其中的一部分,专注于如何使脚本的运行更快。这里提供的一些技巧和方法可以优化 JavaScript 代码的执行效率。
JS 函数调用次数是造成性能下降的一个重要缘由,因此,在编写 JavaScript 代码时,我们应该尽量减少函数调用的次数。在处理循环的过程中,如果不调用函数,而是在循环内直接运行代码,通常会更快。
在 JavaScript 中,我们有多种循环方式,比如,for、for in、while 等。在对数组或对象进行操作时,应该选择最恰当的循环方式。对于数组遍历操作,使用 for 循环明显比 for in、forEach 更快,而对于对象遍历操作,for in 比 for 更快。
在 JavaScript 中,创建和销毁对象是非常常见的。但是,创建和销毁大规模的对象会消耗很多内存,进而影响代码的性能。此时,使用对象池可以缓存已经创建的对象,避免重复创建。
在 Web 开发中,移动端性能优化对于许多开发者来说可能会是一块难以逾越的难关。移动端性能优化要点大致分为以下几个方面:
对于移动设备而言,它们的分辨率以及像素密度与传统 PC 设备是有所不同的。因此,通过针对不同分辨率和像素密度优化图片可以在大大减少需传输图片的大小和网络负荷的同时,保证图片在移动设备上的显示效果。
在移动端网页中,CSS 规则的应用是非常重要的。合理应用 CSS 样式可以大大提升页面渲染的性能。因此,在移动端优化中,我们应该尽可能避免样式的嵌套使用和不必要的重复定义。
针对移动设备的特性,可以使用 Gzip 等压缩文件的方式,进一步减少传输数据量和网络负荷。特别是对 JS 和 CSS 表示优化处理更为有效,在一定程度上可以减小传输数据的大小。
程中,我们可以选择使用 webpack 等打包工具和前端库来提高开发的效率。
在 webpack
构建过程中,可以使用 uglifyjs-webpack-plugin
插件来压缩 javascript
代码,以及使用 extract-text-webpack-plugin
插件来提取 css 构建单独的文件并压缩。
在 webpack
构建过程中,可以使用 webpack-merge
插件来合并不同 JSON
文件,合并各个页面的单独的 css
和 js
文件,减少 HTTP
请求次数,优化页面渲染性能。
可以使用 image-webpack-loader
来压缩和优化图片,提供 pixelsize
和 quality
函数,进一步控制图片的大小和质量,优化页面渲染性能。
在使用 CDN
时,可以添加 https://cdn.example.com/
前缀,避免其他域名浪费时间,优化网站性能。
LCP主要受四个因素影响:
- 缓慢的服务器响应速度
- JavaScript 和 CSS 渲染阻塞
- 资源加载时间
- 客户端渲染
实现方案:
前端性能优化
是 Web
开发中一个重要的方面。它的目标是提升页面响应速度、加快页面加载速度、减少页面操作所需的时间和提高用户体验。在优化效果不明显可以逐一排除的情况下,最优的方法是 从整体出发,从多个方面入手,并结合实际的业务场景和实践,注重效率的提升 ,才能真正做到精益求精,性能优化的进一步提升。
前端性能优化
可以从优化网络性能和页面渲染性能两个方面着手,包括资源的压缩和合并,使用 CDN 加速,图片的优化处理以及 HTML、CSS 和 JavaScript 的优化处理,优化渲染过程,采用成熟的工具和框架以及提供高性能的云服务等。在构建项目时,可以通过优化 CSS
、JavaScript
和 HTML
,优化 webpack
打包文件,采用 WebP
、Woff
、JPEGXR
等前端技术,在提供更好的用户体验的前提下,进一步提高页面性能和用户交互体验。