首屏渲染时间到底是什么

先来看几个web.dev上面有关页面性能的几个重要测量指标:

名称(英) 名称(中) 含义
First Contentful Paint(FCP) 首次内容绘制 页面从开始加载到内容的任何部分在屏幕上完成渲染的时间
Largest Contentful Paint(LCP) 最大内容绘制 页面从开始加载到最大文本块或图像元素在屏幕上完成渲染的时间
First input delay(FID) 首次输入延迟 从用户第一次与网站交互(例如点击按钮)直到浏览器实际能够对交互做出响应所经过的时间
Time to Interactive(TTI) 可交互时间 页面从开始加载到视觉上完成渲染并初始化脚本,能够快速可靠地响应用户输入所需的时间

这里我们更多关注的是FCPLCP,结合一张图可以更好的理解:

对这个页面的渲染过程来说,FCP是页面上首次出现文本和图标的时间点,虚线框选的部分是当前页面的最大元素,这里是图片,因此图片渲染出来的时间点就是LCP的时间。此外,大家可能也听过FMP这个指标,也即First Meaningful Paint(首次有效绘制),但这个指标并没有一个统一的标准,每个网站上也不一样,更多是作为辅助指标。

那么应该采取哪个指标来衡量首屏渲染时间,web.dev上的结论是:

Based on discussions in the W3C Web Performance Working Group and research done at Google, we’ve found that a more accurate way to measure when the main content of a page is loaded is to look at when the largest element was rendered.

显然是倾向于LCP的,这也更符合用户的体验。那下面就是如何测的问题了,准确说是如何优雅的测。这里我介绍一种使用自动化测试框架Cypress的方法,至于原因,一来是最近在接触这方面的内容,再者确实很方便。至于安装,按照官网来就行,感兴趣的话也可以参考我近期「一文,教你搭建前端自动化测试环境」文章中关于Cypress的部分。

回到测试的思路,这里借助DOM元素记录页面加载前后的时间差,严格来说这个计算出的时间是小于LCP的,但肯定大于FCP,也更接近用户的真实体验。将这个值记为fs,也即First Paint

测试用例编写思路

首先实现核心逻辑,也即利用测试页面加载前后的时间戳之差计算首屏渲染时间,这里用到了两个Cypress API

  • beforeEach():在每个测试用例运行之前运行一次
  • afterEach():在每个测试用例运行之后运行一次

我们在测试用例中会访问页面,所以利用beforeEach()很容易实现页面加载前,问题在于访问页面后应该什么时候记录时间戳,考虑到页面加载过程对用户而言最直观的就是DOM元素的变化,因此这里选取了页面上的一个按钮是否渲染出来作为页面加载完的依据。代码如下:

describe("测试首屏加载时间", () => {let startTime;const url = "https://juejin.cn";beforeEach(() => { startTime = +new Date();});afterEach(() => {let fp = +new Date() - startTime;console.log(fp);});it("加载掘金页面", () => {cy.visit(`${url}`);cy.get('[d="M3.69678 3.69531L9.00008 8.9986L14.3034 14.3019"]').click(); //消除弹窗cy.get(".sticky-block > .sidebar-block > .block-body > a > .app-link > .content-box > .headline").should("contain", "下载稀土掘金APP");});
});

这里cy.get()中的选择器是直接使用Cypress选取的,所以可能不太优雅,选取的原因是在没登录时加载掘金首页会出现闪念笔记的弹窗,但选择器这里目前不是我们关心的,先看测试用例运行的结果:

可以看到测试用例通过

聊一款简单且精妙的微前端框架 ice stark(上)相关推荐

  1. 极致的微前端框架,成本低、速度快、原生隔离、功能强

    ◆ 一.开源项目简介 无界微前端是一款基于 Web Components + iframe 微前端框架,具备成本低.速度快.原生隔离.功能强等一系列优点. ◆ 二.开源协议 使用MIT开源协议 ◆ 三 ...

  2. 微前端框架哪个好?QianKun还是MicroApp

    在当前云原生微服务.业务中台.低代码平台等IT架构下,不再是传统的烟囱式应用系统建设,而是打破企业业务部门竖井,建立企业级的信息化平台(数据中台.业务中台),那么对业务开发的解耦和聚合将成为关键技术, ...

  3. 极简微前端框架-京东MicroApp开源了

    前言 MicroApp是一款基于类WebComponent进行渲染的微前端框架,不同于目前流行的开源框架,它从组件化的思维实现微前端,旨在降低上手难度.提升工作效率.它是目前市面上接入微前端成本最低的 ...

  4. 从零到一实现企业级微前端框架,保姆级教学

    前言 这篇文章笔者足足肝了一周多,多次斟酌修改内容,力求最大程度帮助读者造出一个微前端框架,搞懂原理.觉得内容不错的读者点个赞支持下. 微前端是目前比较热门的一种技术架构,挺多读者私底下问我其中的原理 ...

  5. 2020 非常火的 11 个微前端框架

    点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 作者 | Jonathan Saring 译者 | Flora https://itnex ...

  6. 基于 iframe 的微前端框架 —— 擎天

    vivo 互联网前端团队- Jiang Zuohan 一.背景 VAPD是一款专为团队协作办公场景设计的项目管理工具,实践敏捷开发与持续交付,以「项目」为核心,融合需求.任务.缺陷等应用,使用敏捷迭代 ...

  7. 深入浅出解析阿里成熟的微前端框架 qiankun 源码【图文并茂】

    来源:leaf(a1029563229 ) https://github.com/a1029563229/blogs/blob/master/Source-Code/qiankun/1.md 本文将针 ...

  8. 深入浅出解析阿里成熟的微前端框架 qiankun 源码

    本文将针对微前端框架 qiankun 的源码进行深入解析,在源码讲解之前,我们先来了解一下什么是 微前端. 微前端 是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的 ...

  9. 初探 MicroApp,一个极致简洁的微前端框架

    前言 哈喽大家好,我是海怪. 在微前端的领域里,相信大家都听说过阿里的 qiankun.我自己在上几个月也一直用它来做一些实践: 微前端x重构实践落地总结 当企微侧边栏遇上微前端 在使用过程中我发现 ...

最新文章

  1. ubuntu apt安装lamp
  2. Js文件中调用其它Js函数的方法(转)
  3. mongodb查询内嵌文档
  4. 终于,我读懂了所有Java集合——queue篇
  5. 查看分支编码_MySQL分支数据库MariaDB之CentOS安装教程
  6. 同样存10万元 换种方式存钱让你利息增加6倍
  7. 小程序开发 缓存的应用
  8. 查询Linux的公网及内网IP
  9. python/pytorch中的一些函数介绍
  10. java的finalize方法使用
  11. ubuntu 14.04中安装Jenkins
  12. 串口硬盘如何应用于并口硬盘计算机,串口硬盘和并口硬盘如何区别?
  13. 电脑一分钟小技巧:win10微信电脑端多开方法
  14. 笔记本html外接显示器,笔记本怎么外接显示器?XP笔记本外接显示器的方法
  15. 可变剪切(选择性剪接)rmats2sashimiplot可视化安装与使用
  16. Openbravo怎么给工具栏添加一个按钮
  17. 计算机自动关机原理,电脑自动关机是什么原因怎样处理
  18. Linux 多点电容触摸屏
  19. altium 旋转线段_几何画板旋转动画教程,这软件真牛!
  20. 仅需三步,远程桌面控制公司内网电脑

热门文章

  1. MongoDB数据查询中的关键字ne
  2. javaEE Log4j,日志
  3. Vista下安装AppLocale
  4. Rust雪山怎么防冷_注意啦!据说今年是冷冬,冻害怎么预防?(附天气预报)
  5. MymetroapphasanerrorafterSystemWin8Updating.
  6. 电子计算机发展飞速还是迅猛,多媒体技术在小学语文教学中的应用
  7. Android Studio常用快捷键、Android Studio快捷键大全
  8. 02.安装开发者工具
  9. 基于stm32的汽车酒精检测汽车防撞报警系统(实物图+源程序+原理图+PCB+参考论文)
  10. 45度角地图坐标计算