web前端性能分析--原理篇

简介:

web前端性能:
  即是web用户在访问一个页面时所要花费的时间总和。即一个完全意义上的用户响应时间,相对于服务器的响应时间而言还会包括更多的内容和影响因素。那么一个web页面的完整请求包括了哪些部分的时间总和就是web前段性能分析和优化所需要了解的基础知识,先了解一下用户从浏览器访问一个url后到页面完全展示所有内容的整个过程吧。
   页面的请求过程:
  1、浏览器的url请求
  2、递归寻找DNS服务器
  3、连接目标IP并建立TCP连接
  4、向目标服务器发送http请求
  5、web服务器接收请求后处理
  6、web服务器返回相应的结果【无效、重定向、正确页面等】
  7、浏览器接收返回的http内容
  ================================前端解析分割线===========================================
  8、开始解析html文件,当然是自上而下,先是头部,后是body
  9、当解析到头部css外部链接时,同步去下载,如果遇到外部js链接也是下载【不过js链接不建议放在头部,因为耽误页面第一展现时间】
  10、接着解析body部分,边解析边开始生成对应的DOM树,同时等待css文件下载
  11、一旦css文件下载完毕,那么就同步去用已经生成的DOM节点+CSS去生成渲染树
  12、渲染树一旦有结构模型了,接着就会同步去计算渲染树节点的布局位置
  13、一旦计算出来渲染的坐标后,又同步去开始渲染
  14、10-13步进行过程中如果遇到图片则跳过去渲染下面内容,等待图片下载成功后会返回来在渲染原来图片的位置
  15、同14步,如果渲染过程中出现js代码调整DOM树机构的情况,也会再次重新来过,从修改DOM那步开始
  16、最终所有节点和资源都会渲染完成
  =========================================分析结束分割线==============================================
  17、渲染完成后开始page的onload事件
  18、整个页面load完成
  整个过程中会有很多的分别请求,所以TCP连接会很多,并且每一个用完都会自己关了,除非是keep-live类型的可以请求多次才关闭。
   综上所述:
  一个页面的请求等于一个或多个url的请求,因此一个页面里包含的外部请求数会影响页面的整体性能
  【每请求一次就要多占用一次cpu使用、多一次tcp连接】
  每个url的请求又包括寻址、连接、请求传输、返回传输、断连的过程;因此每个阶段的外部环境也会影响整体性能
  【DNS服务器的寻址时间,请求和返回内容时的网络环境】
  除了URL请求数量外,每个请求的内容大小也是影响性能的主要因素
  【文件越大消耗在传输过程中的时间就越长】
  请求同样多的资源,并行请求和串行请求速率是不一样的,所以请求的资源要尽量支持同步请求
  【同步请求不同资源,即请求被发送到不同的资源服务器即可】
  依据浏览器的加载、渲染机制,选择合适的HTML内容排版方式
  【减少反复创建对象实例的次数、充分利用缓存机制】
  优先加载用户关注的内容
  【css加载优于js内容,首屏内容优于非首屏内容】
  关注完http请求的过程后,再来关注整个请求过程中关注的几个时间点,通过确定时间点就可以确定影响性能的时间段,就是确定影响性能的因素。根据上面的介绍主要的几个时间点又可以分页面的整体时间点、以及单个url请求过程中的时间点。【基于httpanalyzer工具的指标】
   单个url请求的主要时间点:
  1、Cache Read:缓存读取时间,或304错误的处理时间
  2、Block:请求等待时间,取决于缓存检查,网络连接等待
  3、DNS Lookup:DNS服务器查找时间,取决于dns服务的数量,dns注册的域
  4、Connect:tcp连接的总时间,取决于连接类型,ssh,keepalive都会比http长
  5、Send first to last:发送请求内容的时间,取决于请求内容大小,及上行的传输速度
  6、Wait:等待响应的时间,取决于网络环境的响应,web服务器的处理时间
  7、Receive first to last:接收响应内容的时间,取决于响应内容,下行的传输速度,也要考虑服务器的带宽
  8、Time to first byte:从请求一直到接收到第一个字符的总时间,等于1+2+3+4+5+6
  9、Network:网络消耗时间,等于3+4
  10、Begin to end:整个请求的总时间,等于1+2+3+4+5+6+7
   单个页面的主要时间点:
  1、DOM Ready Time: DOM完成的时间,从接收html到完全转换成dom树所需的时间
  2、DOM Ready to Page Load: 页面元素的加载和渲染完成时间,包括html,css,img及其它内容
  3、Page Load Time: page页onload事件的时间,其实际时间等于总时间 - (DOM ready + 元素渲染时间)
  4、URL Requests Begin to End:url请求所消耗的所有时间,从发送请求发起到接收最后一个字节断开
  5、Network Time:消耗在网络上的时间,即tcp的连接时间
  6、Begin to End:所有消耗的时间,包括请求结束后的渲染时间
相关 文章

   



最新内容请见作者的GitHub页:http://qaseven.github.io/

   

目录
相关文章
|
9天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
10天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
11天前
|
编解码 前端开发 JavaScript
Web 前端开发中的最佳实践
本文将介绍 Web 前端开发中的最佳实践,包括代码组织、性能优化、响应式设计和用户体验等方面。通过遵循这些实践,开发人员可以提高开发效率,优化用户体验,并减少潜在的问题和错误。
|
12天前
|
Web App开发 前端开发 JavaScript
前端应用实现 image lazy loading 的原理介绍
前端应用实现 image lazy loading 的原理介绍
25 0
|
2天前
|
Python 数据可视化 索引
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
14 0
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
|
4天前
|
前端开发 搜索推荐 数据安全/隐私保护
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
HTML标签详解 HTML5+CSS3+移动web 前端开发入门笔记(四)
14 1
|
4天前
|
前端开发 JavaScript vr&ar
前端新技术探索:WebAssembly、Web Components与WebVR/AR
【4月更文挑战第12天】WebAssembly、Web Components和WebVR/AR正重塑Web应用的未来。WebAssembly允许C/C++等语言在Web上高效运行,提供接近原生的性能,如游戏引擎。Web Components通过Custom Elements和Shadow DOM实现可复用的自定义UI组件,提升模块化开发。WebVR/AR(现WebXR)则让VR/AR体验无需额外应用,直接在浏览器中实现。掌握这些技术对前端开发者至关重要。
13 3
|
26天前
|
机器学习/深度学习 前端开发 算法
利用机器学习优化Web前端性能的探索与实践
本文将介绍如何利用机器学习技术来优化Web前端性能,探讨机器学习在前端开发中的应用,以及通过实际案例展示机器学习算法对前端性能优化的效果。通过结合前端技术和机器学习,提升Web应用的用户体验和性能表现。
|
27天前
|
移动开发 前端开发 HTML5
Web前端全栈HTML5通向大神之路
本套课程共三大阶段,六大部分,是WEB前端、混合开发与全栈开发必须要掌握的技能,从基础到实践,是从编程小白成长为全栈大神的最佳教程!
35 3
Web前端全栈HTML5通向大神之路
|
1月前
|
前端开发 JavaScript 安全
深入探索 Qt6 web模块 WebEngineCore:从基础原理到高级应用与技巧
深入探索 Qt6 web模块 WebEngineCore:从基础原理到高级应用与技巧
71 0