前端性能优化(一)

前言

性能优化在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>
相关推荐
历程里程碑4 分钟前
普通数组-----除了自身以外数组的乘积
大数据·javascript·python·算法·elasticsearch·搜索引擎·flask
摸鱼的春哥5 分钟前
春哥的Agent通关秘籍07:5分钟实现文件归类助手【实战】
前端·javascript·后端
念念不忘 必有回响8 分钟前
viepress:vue组件展示和源码功能
前端·javascript·vue.js
Amumu1213812 分钟前
Vue3 Composition API(一)
开发语言·javascript·ecmascript
C澒13 分钟前
多场景多角色前端架构方案:基于页面协议化与模块标准化的通用能力沉淀
前端·架构·系统架构·前端框架
崔庆才丨静觅15 分钟前
稳定好用的 ADSL 拨号代理,就这家了!
前端
江湖有缘17 分钟前
Docker部署music-tag-web音乐标签编辑器
前端·docker·编辑器
hzb6666618 分钟前
unictf2026
开发语言·javascript·安全·web安全·php
恋猫de小郭1 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter