使WordPress成为核心

开的16个月前

关闭15个月前

上次修改时间14个月前

#57687 关闭 任务(幸运的) (固定的)

添加自动化性能测试CI工作流MVP

报告人: 亚当·西尔弗斯坦的简介 亚当西尔弗斯坦 所有者: 穆克斯27的个人资料 口香糖27
里程碑: 6.2 优先: 正常的
严重程度: 正常的 版本: 6.2
组件: 构建/测试工具 关键词: has-patch接口 has-unit-测试
重点: 性能 复写的副本:

描述

这张票是我的make core博客帖子的后续内容“WordPress核心中的自动性能监控“我们将在其中讨论此功能的确切技术实现。

技术要求

如博客文章所述,初始实现的目标将受到限制,因此我们可以快速获得第一个稳定的版本,然后我们可以迭代我们随时间收集的方法和准确的指标。

初始实施应满足以下要求:

  • 在每次提交到主干时运行。
  • 使用标准wp-env环境,使用主题测试数据.
  • 使用服务器计时API记录以下指标的中值超过10次:WordPress总加载时间、模板加载所需的时间以及WordPress初始化在模板之前所需的时间。
  • 将记录的值发送到新的核心性能仪表板,该仪表板将与现有的古腾堡仪表板并排放置。

更改历史记录(24)

#1 @奥安德雷格尔
16个月以前

很高兴看到这方面的进展。

为了提高可视性并尽可能多地进行对齐:我想与大家分享一下,古腾堡(和codehealth)现在正在跟踪第一个字节的时间和最大内容绘制。我认为这是用于跟踪前端指标的v1。

虽然跟踪在服务器上花费的时间很有用,但它与用户感知的性能没有直接关系。我们还需要跟踪客户指标。例如,WordPress处理要呈现的帖子,以便识别正在使用的块。有了这些信息,它只将那些块的CSS排队,而不是整个块库的CSS。这当然会在服务器上花费更多的时间,尽管我们希望它能提高用户的感知性能。如果我们只跟踪服务器指标,他们会将此行为报告为回归,并且我们缺乏工具来了解它如何影响实际的用户感知性能。

所以,我想知道你是否也会把这两个指标作为核心MVP的一部分?

#2 @弗利克索斯90
16个月以前

@oandregal这是一个很好的观点,我们已经在周一讨论过了走廊上的闲逛.

我们有意希望MVP缩小范围,以便第一个版本能够快速工作。但我想说100%我们想要TTFB涵盖LCP。

如果根据我们的设置添加这一点很简单,我认为作为MVP的一部分这样做是完全合理的;否则我会说这应该是下一个要迭代的东西。

#3 @弗利克索斯90
16个月以前

  • 里程碑已从更改等待审查6.3
  • 所有者设置为口香糖27
  • 状态已从更改新的分配

将此添加到6.3里程碑中,因为我认为这是将第一个MVP添加到WordPress核心代码库的合理目标。

从最终用户的角度来看,里程碑并不重要,因为此功能不会影响最终用户,但显然,一旦我们评估其工作可靠,我们仍希望最终将其合并。

现在将此分配给@mukesh27,因为他主要在这方面工作这个WordPress核心分支项目.

#4 随访: @奥安德雷格尔
15个月以前

关于跟踪有意义的事情的另一个想法。除了:“服务器时间”(TTFB)和“用户时间”(LCP),我们有必要了解客户端呈现其接收的数据所需的时间.

https://github.com/WordPress/gutenberg/pull/48288我建议在古腾堡的前端性能套件中添加一个新指标:LCP-TTFB。我不知道有什么行业指标跟踪同一件事,如果有,我很乐意适应。其基本原理是,TTFB占用了大量LCP,因此可能会隐藏客户端渲染中的任何有意义的差异。例如,如果我们在比较WordPress版本时大幅改进TTFB,那么添加对LCP产生负面影响的阻塞脚本/样式的更改可能会被隐藏。

事实上,请看一下Felix的最新数据包括LCP:

公制WP 6.2β2
TT3的LCP-TTFB103.1毫秒
TT1的LCP-TTFB131.85毫秒

根据这些数据,块主题在客户端渲染时比经典主题快1.25倍。

上次编辑时间15个月前通过奥安德雷格尔(以前的)(差异)

#5 回复: 4 @弗利克索斯90
15个月以前

回复奥安德雷格尔:

https://github.com/WordPress/gutenberg/pull/48288我建议在古腾堡的前端性能套件中添加一个新指标:LCP-TTFB。我不知道有什么行业指标跟踪同一件事,如果有,我很乐意适应。

+1至使用LCP-TTFB。在具体评估客户端更改时,我已经在几个基准测试中使用过这一点。

需要注意的一件事是正确计算中值:我们需要计算每次运行的LCP-TTFB,然后取这些值的中值,而不是取LCP中值和TTFB中值并使用它们。

我相信你提到我的数字主要是为了给你的计算做一个说明性的例子,但为了澄清一下,该计算在技术上以错误的方式计算了中间值(尽管我认为在较高的水平上,我们仍然会注意到块主题的主要客户端性能优势,这一点很值得一看)。

这张票是在采购订单号4139WordPress/WordPress-develop开发通过乔麦吉尔.


15个月以前
#6

  • 关键词 has-patch接口 has-unit-测试补充;需要-补丁远离的

#7 随访: @乔麦吉尔
15个月以前

  • 里程碑已从更改6.36.2
  • 类型已从更改增强任务(幸运的)

@mukesh27和我一直在研究一种初步的方法,这在很大程度上受到了古腾堡回购的绩效工作流程。我已经为上述工作打开了一个初始PR,我们正在对克隆的https://www.codevitals.run/我们为测试目的设置的仪表板。

我特别感谢@desrosj(或其他熟悉GitHub工作流最佳实践的人)对以下几点的反馈:

  1. 到目前为止,工作流中运行时间最长的步骤是安装npm依赖项,假设它们是未缓存的,但我也没有看到这些依赖项在工作流之间被缓存,我想确保我们没有遗漏任何东西。
  2. 发布步骤要求我们在WordPress repo中设置一个秘密令牌,我不确定谁有权在那里添加必要的令牌。

最后,我建议在6.2里程碑期间将此添加为任务(受祝福),因为此更改只影响我们的工作流工具,因为我认为,当我们仍处于这个发布周期的最后几周时,开始捕获性能指标将有利于我们,并将为我们建立一个完整的6.3周期,该周期完全由比较指标涵盖。

上次编辑时间15个月前通过乔麦吉尔(以前的)(差异)

这张票是在采购订单号4160WordPress/WordPress-develop开发通过@德斯罗什.


15个月以前
#8

这增加了中提出的性能测试工作流程#4139到旧的分支工作流,以确保它在支持它的分支中半定期运行(6.2向前)。

为了实现这一目标,#4139应该致力于大旅行箱并且应该在WordPress SVN中创建6.2分支。

Trac票:https://core.trac.wordpress.org/tickt/57687.

#9 回复: 7 @德斯罗什
15个月以前

回复乔麦吉尔:

非常感谢你在这方面的工作!

  1. 中跑得最长的一步

工作流目前正在安装npm依赖项,假设它们是未缓存的,但我也没有看到这些依赖项在工作流之间被缓存,所以我想确保我们没有遗漏任何东西。

缓存在设置-节点操作是缓存全局包数据,而不是节点_模块目录。我们可以在使用之后添加一个单独的步骤操作/缓存缓存实际节点_模块目录,但出于以下几个原因,通常建议不要这样做:

  • 在使用多节点版本时,它可能会导致中断(在这个工作流中,目前对我们来说不是一个真正的问题)。
  • 根据npm特定文档在中操作/缓存动作,使用时可能会断裂npm-ci公司(我们在这里使用)。

有一个古腾堡仓库中的公关建议我们也缓存节点_模块目录。我一直想深入研究并回顾一下那个公关。TLDR的想法是npm-ci公司当缓存未命中时(调用npm-ci公司将删除节点模块安装模块之前,导致问题),以及npm安装当有人这么做的时候。

就目前而言,我想我更愿意与其他人相比文字印刷-开发工作流当前设置为npm-ci公司并且没有直接缓存节点_模块目录。完成这一步的时间约为2分钟(前后约30秒),这与我们在另一步中看到的一致文字印刷-开发工作流。如果古腾堡公共关系最终以良好的结果/没有问题的结果合并,我想立即将其应用到我们所有的工作流程中。

  1. 发布步骤要求我们在WordPress repo中设置一个秘密令牌,我不确定谁有权在那里添加必要的令牌。

为了公开记录这一点,@joemgill和我在Slack DM中讨论了这一点。他分享了需要设置的存储库秘密。我已经设置好了,工作流现在应该可以访问CODEVITALS_项目_确定报告结果的秘密文字印刷-开发.

通过对公关的一些讨论,我认为值得在这里记录的最后一件事是,我们决定将当前版本的内置WordPress作为目标大旅行箱(WP6.2曾经分支过)和运行此测试的未来分支,类似于PHP兼容性测试的引入方式。需要进行单独的讨论,权衡工作量、维护负担(对工作流所需的任何更改都需要在必要时进行回传),以及是否值得将其合并到只接收安全更新的任何分支(在技术上不受支持)。我认为,随着新分支的发布,也可能有理由停止在不受支持的分支上运行性能测试。但这也是我们未来的单独讨论。

这张票是在松弛(Slack)costdev的in#core。查看日志.


15个月以前

@德斯罗什对发表了评论采购订单号4160:


15个月以前
#11

在那一点上,你的公关描述中是指“应该创建6.3个分支”吗?

不,6.2是准确的。如果此更改合并到大旅行箱6.2分支存在时,它将导致错误,因为工作流无法在不存在的分支中调度性能测试工作流的运行。

#12 @乔麦吉尔
15个月以前

感谢@desrosj、@flixos90、@costdev、@youknowriad和@swissspidy提供有关PR的反馈。我相信所有反馈都已得到解决,我希望在创建6.2分支之前完成并提交此新工作流。

我认为这个工作流程的一个重要方面值得以后讨论,但我不认为这是一个阻碍这一承诺的因素,这就是用于根据基线版本标准化每个度量的策略,以减少GitHub运营商自己可能引入的差异。

这里的基本思想是,每次我们进行一组测量时,我们也在测量可作为基线使用的一致版本的WP的性能。因为基线版本保持一致,所以我们可以将基线版本度量的差异归因于环境,而不是代码中的差异,并从在生成的报告中的每次提交的度量中删除差异https://codevitals.run(网址:https://code)仪表板。还应该注意的是,这些规范化都没有作为工作流的一部分发生,我们只是向处理这些计算的报告工具提供数据。

目前,我们使用最新版本(WP 6.1.1)作为基线。古腾堡项目对其指标使用相同的策略,但每次发布新的主要版本的WP时都会更新基本版本。我认为我们不想对核心采用相同的做法,而是在更长的时间内保持相同的基线,但一旦我们有时间监控这些指标,这主要是一个需要考虑的问题。

我希望我们能够不断重复收集和报告过程,但当前的工作流程应该为我们提供一个良好的起点,从中学习和改进。

乔麦吉尔对发表了评论采购订单号4160:


15个月以前
#13

谢谢@desrosj。我不熟悉“老分支”工作流。你能解释一下为什么我们要定期在旧分支上运行性能指标,而不是在进行更改时运行吗?这主要是为了确保工作流仍在工作并且不需要维护吗?还是旧分支工作流存在的另一个原因?

#14 @弗利克索斯90
15个月以前

@乔麦吉尔同意。我认为我们现在应该不更新我们的基本标签,即使新的WordPress版本发布了。古腾堡必须这样做,因为它依赖WordPress和最新的古腾堡大旅行箱不能与太旧版本的WordPress一起使用大旅行箱。但这并不是核心本身的限制,所以我认为在这里,只要合理,我们应该坚持使用一致的基本标签。如前所述,只要基本标签发生变化,之前或之后记录的指标就不再具有统计上的可比性,这意味着对于古腾堡来说,该工具仅用于比较WordPress发布周期内的性能。

正如你已经提到的,还有一些后续想法需要探索。我在中提到了一些https://github.com/WordPress/WordPress-develop/pull/4139#pullrequestreview-1324456566IMO,最高优先级的跟进将是扩展记录的指标,以包括客户端指标(我建议添加加载时间Web Vitals,如LCP、FCP和TTFB)。但所有这些都是合理的迭代,这是一个坚实的公关起点,我认为很好的承诺。

@德斯罗什对发表了评论采购订单号4160:


15个月以前
#15

这主要是为了确保工作流仍在工作并且不需要维护吗

这是主要原因。

也可能有其他情况,一些工作流开始意外失败,但我不知道是否有适合此特定工作流的情况。

首先想到的是PHPUnit测试工作流。最近,由于本地Docker容器几个月没有更新(GitHub停止运行),PHP的特定版本开始出现故障日程安排存储库完全不活动时,大约3个月后发生的事件)。一旦解决了这个问题,PHP的一个更新的点版本引入了一些问题。

#16 @乔麦吉尔
15个月以前

  • 分辨率设置为固定的
  • 状态已从更改分配关闭

55459:

构建/测试工具:添加性能度量工作流。

这增加了一个新的GitHub Action工作流,用于测量每次提交的一组性能指标,因此我们可以跟踪WordPress性能随时间的变化,并更容易地确定开发周期中导致显著性能改进或退化的更改。

该工作流测量了一个经典主题(Twenty Twenty-One)和一个区块主题(Twonty Twonty-Three)的主页,该主题由theme Test Data项目中的演示内容组成。使用e2e测试框架,它会发出20个请求,并记录以下服务器计时指标的中值,这些指标由作为此工作流的一部分安装的mu-plugin生成:

  • 服务器总响应时间
  • 加载模板之前的服务器时间
  • 模板渲染期间的服务器时间

除了测量当前提交的性能指标外,它还记录了WordPress(6.1.1)的一致版本的性能指标,用作基线测量,以便从我们的报告中删除GitHub工作人员自己造成的差异。

测量值收集并显示在https://www.codevitals.run/project/wordpress.

道具亚当·西尔弗斯坦、穆克斯27、弗利克索斯90、你知道的里德、安得雷加、德斯罗什、科斯德夫、瑞士斯皮迪。
修复#57687个.

乔麦吉尔对发表了评论采购订单号4139:


15个月以前
#17

在中提交55459

#18 @乔麦吉尔
15个月以前

55479:

构建/测试工具:更新用于记录性能工作流的URL。

这是对55459兰特,它通过添加正确的www子域来修复用于记录性能指标的主机名。

请参见#57687.

这张票是在松弛(Slack)谢尔盖的《核心》。查看日志.


15个月以前

#20 @德斯罗什
15个月以前

55507:

构建/测试工具:定期测试新的性能工作流。

这增加了在中引入的新的性能衡量工作流程[55459]定期测试旧分支的那个。

这可以确保它在一段时间内继续按预期工作,即使带有此工作流的分支有一段时间没有更新。

Props flixos90,乔麦吉尔,德斯罗什。
请参见#57687.

#21 @德斯罗什
15个月以前

55508:

构建/测试工具:添加工作流_发货事件到性能工作流。

这允许通过GitHub API启动工作流运行。

后续行动[55507].

请参见#57687.

#22 @德斯罗什
15个月以前

55509:

构建/测试工具:添加工作流_发货事件到性能工作流。

这允许通过GitHub API启动工作流运行。

后续行动[55507].

合并[55508]到6.2分支。
请参见#57687.

这张票是在松弛(Slack)谢尔盖的《核心》。查看日志.


14个月以前

注:请参见TracTickets公司有关使用的帮助门票。