前端性能优化(一)

前言

性能优化在Web开发中是一个关键的议题,尤其是对于那些需要处理大量DOM操作和复杂数据的应用程序。

性能优化的重要性

在Web开发中,性能优化不仅可以提升用户体验,还可以降低服务器负载和能源消耗。快速加载和响应的应用程序能够增强用户满意度,提高用户留存率,甚至可以提升搜索引擎排名。

涉及大量DOM操作的挑战

当应用程序需要频繁地进行DOM操作时,如插入、删除或修改元素,这可能会导致页面的回流和重绘,从而降低性能。回流和重绘是浏览器渲染页面时的开销大的操作,特别是在复杂的布局和样式计算下。

正文

1. 减少HTTP请求, 使用http2.0

HTTP请求的数量对网页加载速度有直接的影响。每一个HTTP请求都会增加加载时间,因为它需要建立连接、发送请求、等待响应和接收数据。因此,减少HTTP请求是提升网页加载速度的关键。

  • 2.0多路复用
    1. 一个域名只使用一个TCP长连接

    2. 将每一个请求分成一帧一帧的数据进行传输并打上标记,同时发送给服务端,且可以在重要资源 请求中编辑为加加急,服务端接受到带有各种标号的数据帧后,可以区分哪个数据帧加急,优先整理 和响应该请求的数据帧 (通过引入了二进制分帧层实现多路复用)

2. 使用服务端渲染 (让首屏加载更快, SEO好)

服务端渲染(Server-Side Rendering,简称SSR)是一种将网页内容在服务器端生成并发送给浏览器的技术。与传统的客户端渲染(Client-Side Rendering,简称CSR)相比,SSR 在一些情况下可以提供更好的性能、搜索引擎优化(SEO)和用户体验。

为什么要用 SSR?

  • 更快的首屏加载 :这一点在慢网速或者运行缓慢的设备上尤为重要。服务端渲染的 HTML 无需等到所有的 JavaScript 都下载并执行完成之后才显示,所以你的用户将会更快地看到完整渲染的页面。除此之外,数据获取过程在首次访问时在服务端完成,相比于从客户端获取,可能有更快的数据库连接。这通常可以带来更高的核心 Web 指标评分、更好的用户体验,而对于那些"首屏加载速度与转化率直接相关"的应用来说,这点可能至关重要。
  • 统一的心智模型:你可以使用相同的语言以及相同的声明式、面向组件的心智模型来开发整个应用,而不需要在后端模板系统和前端框架之间来回切换。
  • 更好的 SEO:搜索引擎爬虫可以直接看到完全渲染的页面。

3. 合理使用CDN

使用CDN(内容分发网络)是一种常用的性能优化策略,可以显著提高网站的加载速度和用户体验。CDN通过在全球各地部署服务器节点来缓存网站内容,使用户可以从距离较近的服务器获取内容,从而减少延迟和提高加载速度。

4. 将css放在文件头部,将js放在文件底部

将CSS放在文件头部

优点:

  1. 避免闪烁:当浏览器渲染页面时,它会先加载和解析CSS,然后再渲染页面内容。如果CSS在加载完成前就开始渲染页面,可能会导致内容闪烁或未样式化的内容显示。
  2. 提高渲染速度:浏览器在解析HTML时会创建DOM(文档对象模型)树和CSSOM(CSS对象模型)树。将CSS放在头部可以确保浏览器尽早开始构建CSSOM,从而加速页面的渲染。

实施方法:

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <!-- 页面内容 -->
</body>
</html>

将JS放在文件底部

优点:

  1. 不阻塞页面渲染:JavaScript的加载和执行是阻塞的,将其放在底部可以确保HTML和CSS在加载和渲染完成后再开始执行JS,从而避免阻塞页面渲染。
  2. 提高首屏加载速度:用户可以更快地看到完整的页面内容,而无需等待JS的下载和执行。
  3. 减少渲染阻塞:当JS放在底部时,页面的主要内容和样式可以更快地渲染出来,减少因JS执行而导致的渲染阻塞。

实施方法:

js 复制代码
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <!-- 页面内容 -->

    <script src="scripts.js"></script>
</body>
</html>
相关推荐
阿珊和她的猫1 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
PAK向日葵3 小时前
【算法导论】PDD 0817笔试题题解
算法·面试
加班是不可能的,除非双倍日工资5 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi6 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip6 小时前
vite和webpack打包结构控制
前端·javascript
excel7 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国7 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼7 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy7 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
ZXT7 小时前
promise & async await总结
前端