前端性能优化(一)

前言

性能优化在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>
相关推荐
旧曲重听128 分钟前
最快实现的前端灰度方案
前端·程序人生·状态模式
默默coding的程序猿38 分钟前
3.前端和后端参数不一致,后端接不到数据的解决方案
java·前端·spring·ssm·springboot·idea·springcloud
夏梦春蝉43 分钟前
ES6从入门到精通:常用知识点
前端·javascript·es6
归于尽1 小时前
useEffect玩转React Hooks生命周期
前端·react.js
G等你下课1 小时前
React useEffect 详解与运用
前端·react.js
我想说一句1 小时前
当饼干遇上代码:一场HTTP与Cookie的奇幻漂流 🍪🌊
前端·javascript
funnycoffee1231 小时前
Huawei 6730 Switch software upgrade example版本升级
java·前端·华为
小鱼小鱼干1 小时前
【Tauri】Tauri中Channel的使用
前端
拾光拾趣录1 小时前
CSS全面指南:从基础布局到高级技巧与实践
前端·css
南屿im1 小时前
基于 Promise 封装 Ajax 请求:从 XMLHttpRequest 到现代化异步处理
前端·javascript