首页 > 其他分享 >2021-08-12--Web前端性能指标和性能优化(综述)

2021-08-12--Web前端性能指标和性能优化(综述)

时间:2023-06-05 11:56:00浏览次数:56  
标签:Web 12 浏览器 -- 首屏 时间 加载 优化 页面

title: 网站的几个性能指标和优化(简易)
categories:
  - 网络安全与性能优化
tags:
  - 性能优化
  - 性能指标
  - 白屏时间
  - 首屏时间
  - TTFB
abbrlink: 5c56
date: 2021-08-12 23:42:49
updated: 2021-08-12 23:42:49

来源:https://m.sohu.com/a/201865334_509523/

关于页面相应时间,有一条著名的“2-5-8原则”。当用户访问一个页面:

  • 在2秒内得到响应时,会感觉系统响应很快;
  • 在2-5秒之间得到响应时,会感觉系统的响应速度还可以;
  • 在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但可以接受;
  • 而超过8秒后仍然无法得到响应时,用户会感觉系统糟透了,进而选择离开这个站点,或者发起第二次请求。

对于一个网站如果希望抓住用户,网站的速度以及稳定性是非常重要的。

从各式各样的前端监控平台中,你都可以获得页面很多的性能指标。本文将介绍几个几个比较关键的指标,并给出相应的优化思路。

开始渲染时间

该时间点表示浏览器开始绘制页面,在此之前页面都是白屏,所以也称为白屏时间

该时间点可用公式:
Time To Start Render = TTFB(Time To First Byte) + TTDD(Time To Document Download) + TTHE(Time To Head End)

  • TTFB:表示浏览器发起请求到服务器返回第一个字节的时间;
  • TTDD:表示从服务器加载HTML文档的时间;
  • TTHE:表示文档头部解析完成所需要的时间。

在高级浏览器中有对应的属性可以获取该时间点。Chrome可通过chrome.loadTimes().firstPaintTime获取,IE9+可以通过performance.timing.msFirstPaint获取,在不支持的浏览器中可以根据上面公式通过获取头部资源加载完的时刻模拟获取近似值。开始渲染时间越快,用户就能更快的看见页面。

对于该时间点的优化有:

  1. 优化服务器响应时间,服务器端尽早输出
  2. 减少html文件大小
  3. 减少头部资源,脚本尽量放在body中

DOM Ready

该时间点表示dom解析已经完成,资源还没有加载完成, 这个时候用户与页面的交互已经可用了。用公式TimeTo Dom Ready = TTSR(Time To Start Render) + TTDC(Time To Dom Created) + TTST(Time To )可以表示。TTSR上面已经介绍过了,TTDC表示DOM树创建所耗时间。TTST表示BODY中所有静态脚本加载和执行的时间。在高级浏览器中有DOMContentLoaded事件对应。

详细规范可以查看W3C的HTML5规范。从MDN文档上可以看出该事件主要是指dom文档加载解析完成,看上去很简单,但是DOMContentLoaded事件的触发与css,js息息相关,现在有专门的名词Critical Rendering Path(关键呈现路径)来描述。

在不支持DOMContentLoaded事件的浏览器中可以通过模拟获取近似值,主要的模拟方法有:

  1. 低版本webkit内核浏览器可以通过轮询document.readyState来实现;

  2. ie中可通过setTimeout不断调用documentElement的doScroll方法,直到其可用来实现;

具体实现方法可以参考主流框架(jquery等)的实现。 DOM Ready时间点意味着用户与页面可以进行交互了,因此越早越好,对于该时间点的优化有:

  1. 减少dom结构的复杂度,节点尽可能少,嵌套不要太深;
  2. 优化关键呈现路径;

首屏时间

该时间点表示用户看到第一屏页面的时间,这个时间点很重要但是很难获取,一般都只能通过模拟获取一个近似时间。一般模拟方法有:

  1. 不断获取屏幕截图,当截图不再变化时,可以视为首屏时间。可参考webPagetest的Speed Index算法;
  2. 一般影响首屏的主要因素是图片的加载,通过页面加载完后判断图片是否在首屏内,找出加载最慢的一张即可视为首屏时间。

针对该时间点的优化有:

  1. 页面首屏的显示尽量不要依赖于js代码,js尽量放到domReady后执行或加载;
  2. 首屏外的图片延迟加载;
  3. 首屏结构尽量简单,首屏外的css可延迟加载;

该时间点是window.事件触发的时间,表示原始文档和所有引用的内容已经加载完成,用户最明显的感觉就是浏览器tab上loading状态结束。

该时间点的优化方式有:

  1. 减少资源的请求数和文件大小;
  2. 将非初始化脚本放到之后执行;
  3. 无需同步的脚本异步加载

为了优化整站性能,页面的时候可以考虑做一些预加载,把其它页面需要用到的资源预先加载进来。

标签:Web,12,浏览器,--,首屏,时间,加载,优化,页面
From: https://www.cnblogs.com/zenkin/p/17457436.html

相关文章

  • 3. HelloWorld的实现
    恐惧是本能,行动是信仰(在此感谢尚硅谷宋红康老师的教程)1.新建Project-Class选择"NewProject":指名工程名、使用的JDK版本等信息。如下所示:接着创建Java类2.编写代码publicclassHelloWorld{publicstaticvoidmain(String[]args){......
  • 2021-01-09--网络安全问题清单:问题类型-问题描述-解决方案
    title:网络安全问题清单:问题类型-问题描述-解决方案categories:-网络安全与性能优化tags:-网络安全-网站测试-安全清单abbrlink:'393'date:2021-01-0913:02:39updated:2021-01-0913:02:39最近收到一份网络安全检查清单(如下,有删减),再加上部分的IBM......
  • 模拟点击系统按键
    privatevoidsendEvent(intaction,intcode){longwhen=SystemClock.uptimeMillis();finalKeyEventev=newKeyEvent(when,when,action,code,0/*repeat*/,0/*metaState*/,KeyCharacterMap.VIRTUAL_KEYBOARD,0/*scancode*/,......
  • 作为「码农」的第一个十年
    十年如果从上大学,闭门造车似地捣鼓ActionScript3开始,已经写了10年代码了.AS3Java、Struts2、Hibernate、HTML、Javascript、CSS、SVN、Git、SQLServer、MySQL、AndroidLinux、PHP、ThinkPHP、Cavy、SQLite、Angular1.x、Python、Django、Postgres、Vue2、Webpack、Hive......
  • 常用的开源自定义表单有哪几大优势特点?
    当前,办公已经进入流程化和自动化的阶段,要想跟随着社会发展,引用开源自定义表单工具可以使办公协作效率得到快速提升,它的灵活、便捷、易操作等特点,使得该表单工具深受当今职场的喜爱,是做好数据管理,提升办公表单制作效率和质量的得力助手。今天这篇文章就与大家一起分享常用的开源自......
  • day18 生成器
    生成器【一】生成器与yield若函数体包含yield关键字,再调用函数,并不会执行函数体代码,得到的返回值即生成器对象>>>defmy_range(start,stop,step=1):...print('start...')...whilestart<stop:...yieldstart...start+=step...print......
  • SPA17N80C3-ASEMI代理英飞凌MOS管SPA17N80C3
    编辑:llSPA17N80C3-ASEMI代理英飞凌MOS管SPA17N80C3型号:SPA17N80C3品牌:Infineon(英飞凌)封装:TO-220F最大漏源电流:17A漏源击穿电压:800VRDS(ON)Max:0.29Ω引脚数量:3特点新的革命性高压技术全球最佳RDS(上)在TO220中超低栅极电荷周期性雪崩额定值极限dv/dt额定值超低有效......
  • Java的先行发生原则
    先行发生原则(Happens-Before)是Java内存模型定义的一个等效判断原则。依赖这个原则,我们可以通过几条简单规则判断数据是否存在竞争,线程是否安全,而不需要陷入Java内存模型苦涩难懂的定义之中。“先行发生”原则指的是什么。比如说操作A先行发生于操作B,其实就是说在操作B发生......
  • BOSHIDA DC电源模块在工业自动化的应用
    三河博电科技BOSHIDADC电源模块在工业自动化的应用 随着自动化技术的不断发展,DC电源模块已成为工业控制系统中不可或缺的一个组成部分。在许多自动化系统中,如机器人、控制器、PLC等,都需要使用到直流电源模块来提供稳定可靠的电源,以确保系统的正常运行。本文将从以下几个方面......
  • nginx配置图片服务器
    startnginx           //运行nginx nginx-sstop     //停止nginxnginx-sreload   //重新加载配置文件(如修改配置文件后,可通过该命令重新加载)nginx-squit     //退出nginxnginx-v        //......