• 0
  • 1
分享

  背景

  性能是网站和应用的支柱,网站性能高,用户体验会更好,同时,网站速度也是搜索引擎排名的一个因素。因此,好的网站性能直接影响我们的收益指标,因此有必要提高网站的性能,从而从技术角度拿到业务收益。

  性能优化的指标

  RAIL模型是Google给出的一套以用户为中心的性能模型,它提供了一种考虑性能的结构。 该模型将用户体验分解为关键操作(例如,点击、滚动、加载)并帮助您为每个操作定义性能目标。 RAIL分别代表:

  · Response:响应

  · Animation:动画

  · Idle:空闲

  · Load:加载 如下图所示:

1-2.jpg

  响应

  在 100 毫秒内完成由用户输入发起的转换,让用户感觉交互是即时的。

  · 为了确保在 100 毫秒内产生可见响应,需要在 50 毫秒内处理用户输入事件。这适用于大多数输入,例如点击按钮、切换表单控件或启动动画。但是,这不适用于触摸拖动或滚动。

  · 尽管听起来可能有些自相矛盾,但是,即时响应用户输入并非总是正确的做法。您可以利用这 100 毫秒的时间窗口来执行其他需要消耗大量资源的工作,但是,注意不能妨碍用户。如果可能,应在后台工作。

  · 对于需要 50 毫秒以上才能完成的操作,请随时提供反馈。

  50 毫秒还是 100 毫秒?

  目标是在 100 毫秒内响应输入,那么,为什么我们的预算只有 50 毫秒?这是因为除输入处理外,通常还有需要执行其他工作,而且这些工作会占用可接受输入响应的部分可用时间。如果应用程序在空闲时间以推荐的 50 毫秒区块执行工作,这就意味着,如果输入在这些工作区块之一中发生,它最多可能会排队 50 毫秒。考虑到这一点,假设只有剩余的 50 毫秒可用于实际输入处理才是安全地做法。下图展示了这种影响,图中显示了在空闲任务期间收到的输入如何排队,从而减少可用的处理时间:

1-3.jpg

  动画

  在 10 毫秒内生成一帧:

  · 在 10 毫秒或更短的时间内生成动画的每一帧。从技术上来讲,每帧的最大预算为 16 毫秒(1000 毫秒/每秒 60 帧≈16 毫秒),但是,浏览器需要大约 6 毫秒来渲染一帧,因此,准则为每帧 10 毫秒。

  · 目标为流畅的视觉效果。用户会注意到帧速率的变化。

  空闲

  最大限度增加空闲时间以提高页面在 50 毫秒内响应用户输入的几率。

  加载

  · 根据用户的设备和网络能力优化相关的快速加载性能。目前,对于首次加载,在使用速度较慢 3G 连接的中端移动设备上,理想的目标是在 5 秒或更短的时间内实现可交互。

  · 对于后续加载,理想的目标是在 2 秒内加载页面。

  通过APIs动态获取指标

  如何通过api来获取网页的一些实时的指标数据,对我们做优化非常重要。一般情况,我们通过performance对象来获取常规的性能指标数据。

1-4.jpg

  下面我们只介绍我们最常用的值:

  · navigationStart: 浏览器处理当前网页的启动时间

  · fetchStart:浏览器发起HTTP读取文档的毫秒时间戳

  · domainLookupStart: 域名查询开始的时间戳

  · domainLookupEnd: 域名查询结束的时间戳

  · connectStart: HTTP请求开始向服务器发送的时间戳

  · connectEnd: 浏览器与服务器链接建立

  · requestStart: 浏览器向服务器发出HTTP请求的时间戳

  · responseStart: 浏览器从服务器收到第一个字节的时间戳

  · responseEnd: 浏览器从服务器收到最后一个字节的时间戳

  · domLoading: 浏览器开始解析网页DOM结构的时间

  · domInteractive: 网页DOM树创建完成,开始加载内嵌资源时间

  · domContentLoadEventStart: 网页domContentLoadd时间发生时的时间错

  · domContentLoadedEventEnd: 网页所有需要执行的脚本执行完成的时间, domReady的时间

  · loadEventStart: 当前网页load事件回调函数开始执行的时间戳

  · loadEventEnd: 当前网页load事件回调函数执行结束的时间戳

1-5.png

  自定义指标采集 我们可以通过自定义一些指标来采集我们想要的数据

  const observer = new PerformanceObserver((list) => {
      for(const entry of list.getEntries) {
          console.log(entry)
      }
  })
  observer.observe({ entryTypes: ['longtask'] })

  性能优化的工具

  有一些工具可以帮助您自动执行 RAIL 测量。具体使用哪一种取决于您需要什么类型的信息,以及您喜欢什么类型的工作流程。


作者:程序员小濠    

来源:http://www.51testing.com/html/12/n-7798012.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 项目结束之后,我们经常需要组织召开复盘会议,很多同学一听到复盘会议就会紧张,好像按照他们的理解,复盘会议就是为了追责,就会十分恐惧。实际上,复盘会议并不是狭义的如此,复盘其实是为了大家一起交流,互相学习,对于做的不好的地方及时改进。简单拿我们的一个复盘过程举例:一、过程回顾1、本轮测试7天时间,共计XX个bug,其中XX个bug为功能 bug已修复,XX个bug为UI bug已修复,XX个bug遗留(XX个bug产品经理给出具体方案后续优化,XX个为浏览器机制产生的一直存在,前端也一直未给出相应的解决)。XX个界面优化用户体验性问题:二、测试过程出现中的问题bug回归不及时,导致问题修改周期长...
            6 5 7958
            分享
          •   2022软件测试行业调查报告开始了,点击链接http://vote.51testing.com/ 填写问卷,五门测试实战课程任选两门免费学习。快来参加吧~  前言  这段时间共持续了四个月,总共投了 19 家公司,有几家挂在了不同的阶段,最后拿到了 8 家的 offer,这段时间里面了几十场面试,大多数面试的问题都懒得做记载了,在此记录一些大概的问题走向、一些面试常见的问题以及一丢丢面试技巧供大家参考。  一、四个月战况  投递统计(统计了一下,这四个月共向以下 19 个公司投递了简历,共拿了 8 个 offer)  一线大厂:字节、百度、腾讯、拼多多。  准一线大厂:华为、快手、美团、图...
            0 0 1346
            分享
          •   摘要:作者在新项目中搭建了python+requests+unittest+HTMLTestRunner接口自动化测试框架,通过修改配置文件实现环境隔离,一份脚本即可在不同的环境执行接口测试用例。  但是没有实现任何形式的消息通知,也没有集成到jenkins,原因很简单,因为还没做到很大,而且用户活跃不够,问题也相对较少,只在上线前后执行一次uat和prod环境。  那这几天想完善一下消息通知功能,让它具备发送消息及报告的功能。  流程  代码  流程及代码功能已在注释中说明。  '''   Created on 2021年5月12日   @au...
            0 0 1323
            分享
          • Postman Newman 是什么?Postman Newman 是一个 CLI(命令行界面)工具,可以使用它来运行 Postman 中的集合(Collection)和环境(Environment)进行自动化测试。它是 Postman 的命令行 Collection Runner,能够直接从命令行运行 Postman 集合。使用 Newman 可以测试 API 的功能、性能、可靠性和安全性,同时可以将测试结果输出成多种格式的报告,例如 HTML、JSON、JUnit 等,以方便开发人员进行问题定位和分析。Postman Newman 的作用通过 Postman Newman 进行自动化...
            0 0 1089
            分享
          • 一、Selenium2+python自动化36-判断元素存在1、捕获异常from selenium import webdriver import unittest class Test1(unittest.TestCase): #一、准备浏览器驱动、网站地址 #setUp在每个测试函数运行前运行,注意大小写;self不能省略 def setUp(self): self.driver=webdriver.Chrome() self.baseurl="https://www.baidu.com" #二、打开浏览器,发...
            13 15 4626
            分享
      • 51testing软件测试圈微信