使WordPress成为核心

开的8个月前

上次修改时间17小时前

#59595 重新打开的 增强

提高WP_Theme_JSON::compute_style_properties的性能

报告人: spacedmonkey的个人资料 spacedmonkey(空格键) 所有者: thekt12的个人资料 第12章
里程碑: 6.6 优先: 正常的
严重程度: 正常的 版本: 5.8
组件: 编辑器 关键词: has-patch接口 请求的更改
重点: 性能 复写的副本:

描述

分析WP 6.4(其他版本)时,方法不是WP_Theme_JSON::compute_style_properties可能会导致大约6-11%的服务器时间用于生成页面。应该进行研究,看看是否可以改进此方法和子函数/方法调用,以提高此方法的性能。

附件(4)

屏幕截图2023-10-24,22.37.16.png(1.2 MB)-由添加佩雷里尼亚 8个月前.
之前的请求概述
屏幕截图2023-10-24,22.38.16.png(1.1 MB)-由添加佩雷里尼亚 8个月前.
之前的功能详细信息
屏幕截图2023-10-24,22.37.29.png(1.2 MB)-由添加佩雷里尼亚 8个月前.
之后请求概述
屏幕截图2023-10-24,22.38.19.png(1.1 MB)-由添加佩雷里尼亚 8个月前.
之后的功能详细信息

更改历史记录(61)

这张票是在松弛(Slack)mukeshpanchal27的核心表现。查看日志.


8个月以前

这张票是在松弛(Slack)pereirinha的核心表现。查看日志.


8个月以前

这张票是在松弛(Slack)pereirinha的核心表现。查看日志.


8个月以前

@佩雷里尼亚
8个月以前

之前的请求概述

@佩雷里尼亚
8个月以前

之前的功能详细信息

@佩雷里尼亚
8个月以前

之后的功能详细信息

#4 @佩雷里尼亚
8个月以前

我用WordPress进行了测试6.5-阿尔法-56966-钢筋以TTF为主题,同时访问一个包含10篇文章的档案页面。我可以用其他版本和主题复制类似的结果,如果发现相关的话,我很乐意分享结果。为了分析,我使用了XH专业尝试使用Blackfire失败后。

这些是我做的测试的结果和发现。

尽管计算样式属性方法是静态的,我没有发现参数相同的情况下对运行时有益。

在我的测试中,此方法的调用数平均为每个请求85个调用。

该方法在其docblock中的描述表明:

给定一个样式数组,它提取样式属性并将它们添加到$declarations数组中…

在单个请求中,其参数的累计大小为:

  • 样式:23.725 KB,
  • 设置:803.350 KB,
  • 属性:202.456 KB,
  • 主题Json:1.748 MB,
  • 选择器:2.634 KB
  • 迭代次数:85

负责此方法约50%的墙时间的是子函数str开始使用,后面是WP_Theme_JSON::获取属性值约33.5%。

大部分时间都花在PHP的自然函数上,这些函数从大型数据集中提取数据,因此无法对其进行全面优化。然而,我尝试了对象缓存,对于那些能够利用此功能的人来说,好处是相当大的。

随附测试的打印屏幕。前一个是核心,后一个运行热缓存。

这张票是在采购编号5567WordPress/WordPress-develop开发通过@佩里林哈.


8个月以前
#5

  • 关键词 has-patch接口补充

添加对象缓存以提高的性能WP_Theme_JSON::compute_style_properties支持时。

Trac票:59595

这张票是在松弛(Slack)pereirinha的核心表现。查看日志.


8个月以前

#7 @口香糖27
8个月以前

  • 里程碑已从更改未来版本6.5
  • 所有者设置为佩雷里尼亚
  • 状态已从更改新的分配

分配给@pereirinha,因为他正在积极工作。

@口香糖27对发表了评论采购编号5567:


8个月以前
#8

@pereirinha我用XHProf为TT4主题主页做了一些基准测试,但我找不到任何改进。我错过什么了吗?

抄送:@felixantz@joemgill

@佩雷里尼亚对发表了评论采购编号5567:


8个月以前
#9

@pereirinha我用XHProf为TT4主题主页做了一些基准测试,但我找不到任何改进。我错过什么了吗?

抄送:@felixantz@joemgill

谢谢@mukeshpanchal27捡到它。你没有看到改进的原因可能是你没有使用Memcached内存?

这张票是在松弛(Slack)乔麦吉尔的核心表现。查看日志.


8个月以前

@口香糖27对发表了评论采购编号5567:


8个月以前
#11

谢谢@mukeshpanchal27捡到它。你没有看到改进的原因可能是你没有使用Memcached内存?

我刚刚通过ENV启用了Memcached,现在我在更改后得到了改进。

https://i0.wp.com/github.com/WordPress/WordPress-develop/assets/10103365/94cc90c8-cca2-40c8-9b59-b0969ca87301

这张票是在松弛(Slack)pereirinha的核心表现。查看日志.


6个月以前

这张票是在松弛(Slack)mukeshpanchal27的核心表现。查看日志.


6个月以前

@佩雷里尼亚对发表了评论采购编号5567:


6个月以前
#14

此缓存何时以及如何失效?添加缓存很好,但如果在文件更改时没有正确地使缓存失效,这将产生比解决更多的问题。

@spacedmonkey,缓存是基于请求的参数创建的。单个页面加载将使用几个不同的缓存条目,我们使用这些参数创建md5哈希。现在我们还将包括wp_get_global_settings(),以便用户所做的任何更改都将强制使用新的缓存项。

清理将每天进行,以便清除未使用的数据。需要注意的是,即使没有更改,缓存也必须每天重新生成一次。

@佩雷里尼亚对发表了评论采购编号5567:


6个月以前
#15

@felixantz@mukeshpanchal27准备好了,您可以回过头来。

我很感激你的耐心。

这张票是在松弛(Slack)乔麦吉尔的核心表现。查看日志.


5个月以前

@isabel_监狱对发表了评论采购编号5567:


5个月以前
#17

谢谢你的ping!我看不出这种方法有什么明显的问题,而且更改全局样式在我的本地开发环境中仍能很好地工作。也许@andrewserong或@ramonjd在处理之前与caching相关的bug时会有其他想法。

@安德鲁斯隆对发表了评论采购编号5567:


5个月以前
#18

谢谢你的ping!我也看不出它有什么明显的问题,但我对这些类的缓存有点谨慎,因为很难预测哪些类型的东西可能会出错。例如,我看到开发模式没有防范措施。这是否会让在本地工作的主题和/或核心开发人员很难尝试对处理逻辑进行更改(除了主题中的更改之外)?

我同意关于将缓存到期时间减少到1小时的评论:https://github.com/WordPress/WordPress-develop/pull/5567#discussion_r1445408359这对我来说更安全,以防在WP版本升级期间出现任何问题。

实际上,这可能是我的主要问题:当站点升级时,这个缓存会自动刷新吗?处理逻辑可能会在不同版本之间发生变化,例如,可以调整流畅的排版规则,或者在未来可能会添加此功能。

很酷,在这里添加缓存可以提高性能!起初,我想知道这是否会带来额外的呼叫,从而影响性能wp_get_global_settings()wp_json编码…有趣的是,同时使用这两种方法生成密钥比处理密钥更便宜计算样式属性使用提供的值🤔

@垄断对发表了评论采购编号5567:


5个月以前
#19

也谢谢你的ping!

如果可以的话,喜欢缓存东西,尤其是大容量的样式gloop。

在这里,我将依靠@oandregal的经验和观点。我相信他以前曾致力于缓存theme.json输出。例如。,https://github.com/WordPress/gutenberg/pull/45543

#20 @乔麦吉尔
5个月以前

  • 关键词 请求的更改补充

@根据@oandregal的观点,目前的方法似乎行不通公关中的反馈.

我想我们可以考虑设置这些缓存wp_add_global_styles_for_blocks(),或作为中的新属性WP_主题_JSON_解析器产生WP_主题_JSON该函数中使用的对象WP_Theme_JSON::获取样式_for_block().

这张票是在松弛(Slack)mukeshpanchal27的核心表现。查看日志.


5个月以前

#22 @乔麦吉尔
4个月以前

  • 里程碑已从更改6.56.6

这仍然需要根据PR的最新反馈进行更新。Punting在明天的6.5 beta 1日期之前达到6.6。

这张票是在松弛(Slack)在kt12的核心表现中。查看日志.


3个月以前

#24 @乔麦吉尔
3个月以前

  • 所有者已从更改佩雷里尼亚第12章

重新分配给@thekt12,他自愿为6.6里程碑捡起这个。请务必查看@pereirinha之前公关的反馈。

#26 @第12章
2个月以前

我添加了一个新的采购订单号6392基于@pereirinha initial的反馈采购编号5567

在目前的比赛中,我无法记录到@pereirinha所记录的同样的进步。

我还看到,对于具有持久缓存的站点,PR可能会有所改善,但我们创建缓存密钥的方式对具有非持久缓存的网站的性能有负面影响(几乎降低6%)。

上次编辑时间2个月前通过第12章(以前的)(差异)

这张票是在松弛(Slack)在kt12的核心表现中。查看日志.


2个月以前

这张票是在松弛(Slack)在kt12的核心表现中。查看日志.


2个月以前

这张票是在松弛(Slack)乔麦吉尔的核心表现。查看日志.


2个月以前

这张票是在松弛(Slack)mukeshpanchal27的核心表现。查看日志.


8周以前

#31 @乔麦吉尔
8周以前

在与@thekt12聊到循环依赖问题后跟进在我的公关审查中。为了避免这种情况,我们可以考虑在WP_主题_JSON_解析器类,该类将获得合并的JSON对象的计算样式,尽管更好的方法可能会将此数据的缓存移动到wp_add_global_styles_for_blocks()最终呼叫的助手WP_Theme_JSON::compute_style_properties()通过WP_Theme_JSON::获取样式_for_block()对于每个注册的块。

在这样做时,我们可能需要分解缓存,以便只缓存核心块的计算样式属性,以便在WP版本更改时使其无效。否则,每当注册的块发生更改时,我们都需要使该缓存无效,这是一个挑战,因为我们没有块版本的概念,因此对现有块的更新可能会导致需要考虑的样式更改。

这张票是在松弛(Slack)乔麦吉尔的核心表现。查看日志.


7周以前

这张票是在松弛(Slack)在克拉克米利的《核心表现》中。查看日志.


6周以前

这张票是在松弛(Slack)在kt12的核心表现中。查看日志.


5周以前

#35个 @第12章
4周以前

@我已经用新的变化更新了公关。我可以看到最新的变化提高了10%。

这张票是在松弛(Slack)在#core中的性能由kt12。查看日志.


4周以前

这张票是在松弛(Slack)mukeshpanchal27的核心表现。查看日志.


4周以前

@乔麦吉尔对发表了评论公共关系编号6392:


4周以前
#38

@kt-12我花了一些时间查看了单元测试,并添加了几个我认为可能有用的附加测试d0b243c。我想不出一种好方法来确保缓存被实际使用,以避免不必要的调用获取样式或块()因为我们无法修改WP_主题_JSON_解析器类硬编码wp_get_global_styles_custom_css()也不是WP_主题_JSON由返回的对象WP_Theme_JSON_Resolver::get_merged_data().

这张票是在松弛(Slack)乔麦吉尔的核心表现。查看日志.


3周以前

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


3周以前
#40

这看起来不错。只是做了一些公关测试,我发现wp_add_global_styles_for_blocks()功能。暂时性需要另一个数据库查询,这抵消了一些改进,但在持久性缓存中,也可以避免。

行李箱

https://github.com/WordPress/WordPress-develop/assets/801097/ff5152cd-8ec4-4359-a7c3-df6dc84ab5d3

本公关
https://github.com/WordPress/WordPress-develop/assets/801097/34dc8ee7-4c0c-4807-8036-dfd0532cc58

一些单元测试失败似乎是合理的,所以让我们找出这些问题,这应该已经准备好了。

这张票是在采购订单号6707WordPress/WordPress-develop开发通过@spacedmonkey(空格键).


2周以前
#41

对class-wp-theme-json.php做了一些小改动,以更好地缓存主题文件。这包括添加“update_cache”功能来设置“str_start_with”和“str_sstart_with_cache“,并删除对空值或非数值的冗余检查。这些改进旨在通过在必要时更新缓存来优化性能。

Trac票:https://core.trac.wordpress.org/ticket/559595

#42 @spacedmonkey(空格键)
2周以前

@thekt12@joemcgill@pereirinha我把我的公共关系为了这个。它增加了一些性能改进和逻辑改进。我看到了一些进步。它将对str_starts_的调用从9k减少到3k。

你们中的一个可以运行一些配置文件,看看这是否是一个真正的改进。

这张票是在松弛(Slack)spacedmonkey的核心性能。查看日志.


2周以前

#44 @亚当西尔弗斯坦
2周以前

@spacedmonkey是不是你的公关打算取代@thekt12一直在努力的公关?

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


2周以前
#45

@kt-12我继续解决了冲突,并用中建议的修复程序更新了该分支我的另一个公关所以现在就要结束了。看起来这已经修复了我们在此分支上看到的测试失败。让我们做一些最后的检查,但我认为这是准备提交。

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


2周以前
#46

随着最新的更新,这仍然是很好的分析,并显示了很大的改进wp_add_global_styles_for_blocks().

行李箱
https://github.com/WordPress/WordPress-develop/assets/801097/14bf909a-6a20-4d1a-9dcd-f02ddd4dc9fb

公共关系
https://github.com/WordPress/WordPress-develop/assets/801097/ea22be7b-0774-49ce-b461-19be6f287457

也就是说,这些改进目前没有反映在性能工作流。我怀疑这是因为为获取瞬态而执行的额外查询抵消了函数中引入的节省,但这只是猜测。考虑到潜在改进的规模,它可能仍然值得投入,因此我们可以在测试期内继续进行进一步测试。

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


2周以前
#47

谢谢@spacedmonkey。我对trunk进行了一些分析,它确实减少了str_starts_与呼叫频率非常高。

行李箱
https://github.com/WordPress/WordPress-develop/assets/801097/aa82a8b0-7b42-45bf-a602-8c704331704d

本公关
https://github.com/WordPress/WordPress-develop/assets/801097/eeac66c2-5fca-4cad-86a8-b9124b373d66

也就是说,我们一直在努力的公关通过减少对该方法的调用数量,产生了更大的影响。也许值得将这两种方法结合起来,以实现利益最大化,但我想优先考虑#6392首先进入主干,因为它具有最大的潜在影响。

#48 @奥格勒克勒
2周以前

  • 里程碑已从更改6.66.7

在Beta 1发布之前,我们还有3个小时的时间来冻结提交,看起来这张票不会及时出现在Trunk中。我正在重新安排到下一个里程碑。如果你正在努力工作,并且即将合并,请在准备好后将其返回。

#49 @乔麦吉尔
2周以前

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

58334:

编辑器:缓存块的全局样式。

这将缓存从合并的主题JSON数据中的块节点生成的CSS,以避免重复计算块的样式属性所需的昂贵操作。生成的CSS保存为每小时过期一次的瞬态。

道具thekt12、spacedmonkey、pereirinha、mukesh27、isabel_brison、oandregal、andrewserong、ramonjd。
修复#59595.

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


2周以前
#50

已在中合并58334.

这张票是在松弛(Slack)乔麦吉尔的核心表现。查看日志.


2周以前

#52 @乔麦吉尔
2周以前

  • 里程碑已从更改6.76.6

#53 @spacedmonkey(空格键)
7天以前

@joemcgill@thekt12我创建了一个公共关系古腾堡回购。我很乐意看到这个。

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


7天以前
#54

@spacedmonkey可以关闭此项以支持https://github.com/WordPress/gutenberg/pull/62522?

#55 @乔麦吉尔
3天以前

  • 分辨率 固定的删除
  • 状态已从更改关闭重新打开的

[58334]使用一个带有1小时TTL的瞬态来缓存块的全局样式,以避免对已注册块的样式进行昂贵的计算。然而,短暂的过期时间会导致对每个请求进行额外的DB查询,因为过期的瞬态不会自动加载,这在很大程度上抵消了缓存的性能优势。我重新开始,看看是否可以避免这个额外的查询。

该方法已经使用了全局设置和块节点的散列作为缓存键的一部分,因此,我们可以只使用该散列进行缓存无效化,并在散列未命中时中断缓存,而不需要TTL。

这张票是在松弛(Slack)乔麦吉尔的核心表现。查看日志.


3天以前

这张票是在松弛(Slack)mukeshpanchal27的核心表现。查看日志.


17小时以前

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