前端性能优化(一)

前言

性能优化在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>
相关推荐
杰哥在此20 分钟前
Python知识点:如何使用Multiprocessing进行并行任务管理
linux·开发语言·python·面试·编程
汪子熙21 分钟前
Angular 服务器端应用 ng-state tag 的作用介绍
前端·javascript·angular.js
Envyᥫᩣ30 分钟前
《ASP.NET Web Forms 实现视频点赞功能的完整示例》
前端·asp.net·音视频·视频点赞
Мартин.4 小时前
[Meachines] [Easy] Sea WonderCMS-XSS-RCE+System Monitor 命令注入
前端·xss
昨天;明天。今天。6 小时前
案例-表白墙简单实现
前端·javascript·css
数云界6 小时前
如何在 DAX 中计算多个周期的移动平均线
java·服务器·前端
风清扬_jd6 小时前
Chromium 如何定义一个chrome.settingsPrivate接口给前端调用c++
前端·c++·chrome
安冬的码畜日常6 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine
ChinaDragonDreamer6 小时前
Vite:为什么选 Vite
前端
小御姐@stella6 小时前
Vue 之组件插槽Slot用法(组件间通信一种方式)
前端·javascript·vue.js