• 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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   最近,在做测试开发平台的时候,需要对测试用例的列表进行后端分页,在实际去写代码和测试的过程中,发现这里面还是有些细节的,故想复盘一下,所以有了这篇文章。  分页的目的  做个假设,加入用例库有 1W 条数据,如果想要以列表形式展示,一次性返回 1W 条数据;这样做有两个弊端:  1.这样写出来的接口会慢。想一下如果随着时间的发展,这个数量变成了 10W、100W 该怎么办?  2.对前端不友好。用前端渲染 1W 条数据,有理智的开发都不会这么做。  所以,我们做分页的目的,主要是为了性能的提高,提高使用体验。  我这边开发语言是Python,Web框架用的是 Tornado,后台数据库用的...
            0 0 939
            分享
          • 今年5月10日,庆祝中国共产主义青年团成立100周年大会胜利召开!聆听习近平主席的重要讲话,让我深受感动和鼓舞!纵观百年青年奋斗史,青年弄潮儿无不紧跟时代、紧跟党的召唤,把永久奋斗作为底色,把小我融入大我,把青春献给祖国和人民!纵观百年青年奋斗史,让我更加坚定不移紧跟党旗;更加坚定不移立足岗位,主动把党的要求融入到业务工作中系统实践;更加坚定不移立志永久奋斗为党贡献力量。学习实践青年百年奋斗史形成的经验,既要看到历史发展的长期必然性,也要看到短期现状的曲折复杂性,情况越复杂越要“不畏浮云遮望眼”。下一步行动计划,整体来说既要关注外因积极主动适应调整,也要关注内因自我成长,具体说来如下:一是要深...
            1 1 853
            分享
          • 摘要:在测试自动化中采用机器学习驱动的自修复技术可以防止松散的测试,减少测试失败,并节省代码维护时间。自修复是在DevOps模型中成功执行连续测试的基本因素之一。在敏捷方法中,应用程序的构建非常迅速,并且在初始开发过程中经常会发生更改。在持续测试中,自动化测试作为软件交付管道的一部分执行,以提供与软件发布候选版本相关的业务风险的即时反馈。在DevOps中,持续测试对于提高质量、降低成本和加速发布非常重要。由于持续测试是CI/CD管道的一部分,所以在代码开发的早期就可以发现问题。它帮助开发人员确定何时以及如何发布新的更改。本文将探讨具有自修复功能的持续测试如何将测试提升到下一个层次。可以减少自动...
            1 0 676
            分享
          •   近期一直在忙着上线测试,过程中也梳理下日常通用的发布测试流程。  一、计划制定阶段  产品经理:  确定需求范围,需求评审后提供PRD及原型。  研发、测试:  评估工作量,整理研发、测试计划。  产品、研发、测试:  沟通协定封版时间以及发布日期。  二、测试前的准备  需求整理确认:确保前期明确的需求均包含在版本中。  相关制品整理:主要升级包和安装包。  测试环境准备:分为安装环境和升级环境。  版本发布测试计划整理,明确具体事项,明确负责人,明确相应的日期,便于跟踪监控。  eg:  三、测试阶段  安装测试  使用安装包,在全新的测试环境上进行安装操作,验证全新安装是否OK。  ...
            0 0 527
            分享
          •   面试的时候老是有问如何测试LOL里面的一个新英雄,以前仅仅只是说一个大概,并且毫无条理。  我悄悄地对自己说,下次再遇到问这个问题,我就可以答出来了。  好吧,那我们正式开始吧。  首先,将一下我的测试逻辑思路。  总共分为四个部分,UI、未拥有此英雄、获得此英雄和英雄在游戏中的表现。  然后具体地分割、再扩展。  一、UI层面  LOL每新增一个英雄,那么美术将制作多个与新增游戏相关的头像、图片等,在这里尝试来一次汇总。虽然,我并不知道这些图片的大小尺寸,总之在我看来,只要有出现这些UI的地方我都找出来,如果有遗漏,欢迎讨论。  1.是否有召唤师头框。  具体的表现为,一个英雄的Q版头像...
            0 0 658
            分享
      • 51testing软件测试圈微信