前端性能优化(一)| 小册免费学

本文涉及的产品
云解析 DNS,旗舰版 1个月
.cn 域名,1个 12个月
全局流量管理 GTM,标准版 1个月
简介: 移动互联网时代,用户对于网页的打开速度要求越来越高。首屏作为直面用户的第一屏,其重要性不言而喻。优化用户体验更是我们前端开发非常需要 focus 的东西之一。

1682513653(1).png

移动互联网时代,用户对于网页的打开速度要求越来越高。首屏作为直面用户的第一屏,其重要性不言而喻。优化用户体验更是我们前端开发非常需要 focus 的东西之一。

一个快速响应的网站可以更好地留住用户,试想一下如果你打开一个网站,过了几十秒网站仍然没有加载完成,你是否还会有耐心去等待?

那这样的话该怎么去提升我们网站的打开速度呢?首先我们要知道打开网站的过程中究竟是什么地方比较耗时,才能更好地去优化,这一节我们主要分析加载网页的过程,也就是前端经典面试题——从输入URL到页面渲染经历了什么。


问题根源


从输入URL到页面渲染经历了什么?这个问题在前端面试中已经被问“烂了”,可能还有部分小伙伴不熟悉这个问题,我们今天就来回顾一下这个问题

  1. 输入网址
  2. DNS查询
  3. 建立TCP连接
  4. 浏览器向服务器发送HTTP请求
  5. 服务器处理请求
  6. 关闭TCP连接
  7. 浏览器解析资源
  8. 页面渲染

一个网页加载的过程大致就是这些,其中需要我们前端工作者去优化的部分已经加粗标注了,下面我们来说详细或一下这几个过程


DNS查询


这个过程其实就是根据域名查询主机地址的过程,主机的标识地址都是通过IP地址来区分的,但是这个IP对于常人来说很难记忆,于是就有了域名这个东西,一般来说域名都是跟网站内容相关的方便记忆的英文单词或者单词组合,但是我们要访问主机还是通过IP来访问,这个过程浏览器会自动帮助我们完成。

这个查询的过程大致如下:

  • 首先浏览器解析输入的域名,先查找本地硬盘的host文件,看有没有和这个域名对应的ip,如果有,就直接使用这个ip。
  • 如果没有,浏览器会发出一个DNS请求到本地DNS(域名分布系统)服务器.本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
  • 请求到达DNS服务器后,DNS服务器首先会查询他的缓存记录,如果有对应的ip地址,则返回,如果没有,本地DNS服务器向DNS根服务器发送查询请求。
  • 根服务器不会记录具体的域名和ip的对应关系,而是返回域服务器的地址.本地服务器会继续向域服务器发起请求。
  • 域服务器并没有记录域名和ip的对应关系,而是返回你的域名的解析服务器的地址.
  • 本地DNS服务器继续向域名解析服务器发出请求,这时会收到域名对应的ip,本地DNS服务器将ip返回给浏览器,并将ip存入缓存,方便下次访问,加快访问速度。

其实这个过程的有话不需要我们自己动手,浏览器或者运行商已经通过缓存手段帮助我们完成了优化

1682513721(1).png


HTTP请求


现在大多的网络请求都基于HTTP协议完成,他是一个基于TCP的应用层协议。

在 HTTP 请求阶段,最大的瓶颈点来源于请求阻塞。所谓请求阻塞,就是浏览器为保证访问速度,会默认对同一域下的资源保持一定的连接数,请求过多就会进行阻塞,一般是 6 个。所以减少HTTP请求或者使用**内容分发网络(CDN)**是优化方向。

其次,HTTP资源传输也需要消耗时间,时长和资源大小成正比,缩小资源体积也是一个优化方向。

再就是将不重要的且短时间不会改动的静态资源缓存下来也是一个方向


解析&渲染


最后一步发生在浏览器,浏览器将从服务器获取到的HTML、CSS、JS等文件进行解析然后渲染页面。

首先会并行解析HTML文档和CSS样式,分别生成产物DOM和CSSOM,然后将二者融合生成渲染树,最后绘制渲染树生成页面,这个过程中不会有JS脚本参与,只要有HTML和CSS就可以完成,但是遇到script标签就会被阻塞,因为JS可以改变HTML和CSS,因此非必要情况下不要在过程中添加script脚本,可以将script标签放到文档内容的最后或者使用 defer 和 async,告诉浏览器在等待脚本下载期间不阻止解析过程。

1682513750(1).png

页面渲染完成之后的界面布局如果发生了改变就会触发回流和重绘,回流的代价要高于重绘,当然这两个都不是善茬,尽量不要去招惹他们

相关文章
|
前端开发 JavaScript 小程序
预备金九银十,这套前端面试小册阁下请收好
预备金九银十,这套前端面试小册阁下请收好
81 0
|
JavaScript 前端开发 Go
前端性能优化(四)| 小册免费学
前面介绍多个前端性能优化的点,现在我们来说一下性能优化的最后一关——页面渲染 浏览器渲染的过程我们之前也稍微提过,这里再说一下解析 HTML 文件,构建 DOM 树,同时浏览器主进程负责下载 CSS 文件
102 0
|
存储 Web App开发 缓存
前端性能优化(三)| 小册免费学
上一讲我们说到了HTTP缓存,这一讲的缓存并不单单指HTTP缓存
99 0
|
缓存 前端开发 网络协议
前端性能优化(二)| 小册免费学
上一节介绍了网页加载过程中可优化的点,这一节我来说一下网络部分的优化。
82 0
|
30天前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
127 2
|
30天前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
37 0
|
30天前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
30天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
30天前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
|
30天前
|
前端开发 算法 测试技术
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT
本文对比测试了通义千文、文心一言、智谱和讯飞等多个国产大模型在处理基础计数问题上的表现,特别是通过链式推理(COT)提示的效果。结果显示,GPTo1-mini、文心一言3.5和讯飞4.0Ultra在首轮测试中表现优秀,而其他模型在COT提示后也能显著提升正确率,唯有讯飞4.0-Lite表现不佳。测试强调了COT在提升模型逻辑推理能力中的重要性,并指出免费版本中智谱GLM较为可靠。
前端大模型应用笔记(五):大模型基础能力大比拼-计数篇-通义千文 vs 文心一言 vs 智谱 vs 讯飞vsGPT