前端性能优化(一)

前言

性能优化在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>
相关推荐
Setsuna_F_Seiei4 小时前
前端转型 Agent 开发 04 之 MCP 与 Skill(赋予 Agent 更广工作能力)
前端·agent
刘发财5 小时前
前端2秒生成500页矢量PDF,rust真的强到没朋友
前端·javascript·rust
找方案5 小时前
AI+人力资源:AI招聘面试的兴起与争议
人工智能·面试·职场和发展
郑州光合科技余经理6 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
梦想平凡6 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
yume_sibai7 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
计算机魔术师9 小时前
特朗普上台打给黄仁勋:AI末日论是骗局,我们绝不让它发生
前端
troy1289 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
计算机魔术师9 小时前
CEO说要慢下来,黑客说别做梦了——同一篇论文,两种命运
前端
kyriewen10 小时前
我花3天抓了一个幽灵bug,凶手藏在第4层
前端·javascript·程序员