使WordPress成为核心

开的15个月前

关闭15个月前

上次修改时间13个月前

#57575 关闭 增强 (固定的)

编辑:介绍HTML标记处理器

报告人: 阿佐兹简介 阿佐兹 所有者: 阿佐兹简介 阿佐兹
里程碑: 6.2 优先: 正常的
严重程度: 正常的 版本:
组件: HTML API 关键词: has-patch接口 has-unit-测试 古腾堡(gutenberg-merge) 有测试信息 需求-开发说明 现场附加指南
重点: 性能 复写的副本:

描述

这将从Gutenbeg存储库中引入HTML标记处理器(从WordPress(文字出版社)/古腾堡@98ce5c5). 标记处理器试图成为一个符合HTML5-spec的解析器,它在PHP中提供查找特定HTML标记的功能,然后添加、删除或更新该标记的属性。它提供了一种安全可靠的方法来修改HTML标记上的属性。

//将缺少的“rel”属性添加到链接。$p=新的WP_HTML_Tag_Processor($block_content);if($p->next_tag('A')&&空($p->get_attribute('rel')){$p->set_attribute('noopener nofollow');}返回$p->get_updated_html();

最初引入于WordPress/gutenberg#42485这个HTML解析系统是在Gutenberg存储库中开发的,它的构建是为了满足持久的需求(正确修改HTML标记属性)由于实际的HTML代码与通过现有的基于字符串搜索的解决方案运行的HTML输入的预期不匹配,导致出现了一系列块编辑器缺陷,因此激发了和。

标记处理器的运行速度足够快,以避免在页面呈现时成为障碍,同时尽可能少地使用内存开销。它实际上是一个零内存开销的系统,只在对输入HTML文档的更改排队时分配内存,在刷新文档中的更改时释放内存,继续查找下一个标记,或通过获取更新的html().

已采取严格措施,以确保标记处理器不会受到意外或非规范HTML输入的干扰,包括引用中不同语法规则引起的问题<标题>,<文本区域>、和<脚本>标签,来自罕见但合法的注释和类XML区域的出现,以及各种语法异常,例如不平衡的标签、不完整的语法和重叠的标签。

标记处理器被限制为将HTML文档解析为标记流。它不会构建HTML树或生成文档的DOM表示。它被设计为从HTML文档的开头开始,并对其进行线性扫描,在扫描时可能会修改该文档。它无法访问标记内部或周围的标记,也无法确定哪些标记打开器和标记关闭器属于彼此,或者确定给定标记的嵌套深度。

它包括一个原始的书签系统,用来记住以前访问过的标签。这些书签引用特定标记,而不是字符串偏移量,并在应用编辑时继续指向文档中的同一位置。通过要求标记处理器查找给定的书签,可以备份并继续处理已经遍历的内容。

使用对属性值进行清理esc_attr()并呈现为双引号属性。在阅读时,它们没有转义和引用。因此,希望依赖标记处理器的作者可以自由地将数据作为普通字符串传递。

存在添加和删除CSS类名的方便方法,以消除处理属性。

//更新标题栏类名$p=新的WP_HTML_Tag_Processor($HTML);while($p->next_tag()){开关($p->get_tag()){案例“H1”:案例“H2”:案例“H3”:案例“H4”:案例“H5”:案例“H6”:$p->remove_class('wp-heading');$p->add_class('wp-block-heading');断裂;}返回$p->get_updated_html();

Tag Processor旨在成为一个可靠的低级库,用于遍历HTML文档,并在此基础上构建更高级别的API。很快,在Core Gutenberg块中,它就意味着要取代目前依赖RegExp模式和更简单的字符串替换的HTML修改。

有关此类更换的示例,请参见以下内容:

作者:@dmsnell,合著作者:@zieladam,@bernhard-reiter,@gziolo。

更改历史记录(62)

#1 @氮杂氮
15个月以前

  • 关键词 has-patch接口已添加

这张票是在采购订单号3920WordPress/WordPress-develop开发通过@dmsnell公司.


15个月以前
#2

  • 关键词 has-unit-测试已添加

@阿佐兹对发表了评论采购订单号3920:


15个月以前
#3

不知道移动if(!class_exists(…))wp-html.php软件(其中需要所有文件)。在核心代码中有很多地方使用了类似的代码。这也将阻止WPCS抱怨压痕。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#4

想知道将if(!class_exists(…))移动到wp-html.php是否更好

同意。我已经在古腾堡一方做了这项工作,以避开短线,并将在合并后,或者如果可以的话,提前将更改移到这里。

@伯恩哈德·雷特对发表了评论采购订单号3920:


15个月以前
#5

想知道将if(!class_exists(…))移动到wp-html.php是否更好

同意。我已经在古腾堡这边完成了这项工作,以避开过梁,并将在合并后,或者如果可以的话,提前将更改移到这里。

我认为我们甚至不应该在这里包括这些保护程序——毕竟,Core是这些类最“规范”的源代码,它的版本应该“优于”Gutenberg插件提供的用于back-compat的版本(这不应该正常发生,但以防因任何原因导致导入顺序混淆)。

#6 @你好,Tonya
15个月以前

  • 关键词 古腾堡(gutenberg-merge)已添加

添加实验古腾堡(gutenberg-merge)用于跟踪从Gutenberg到Core的回传/同步的关键字。

@hellofrom托尼亚对发表了评论采购订单号3920:


15个月以前
#7

不知道是否最好将if(!class_exists(…))移到wp-html.php(其中需要所有文件)。在核心中有很多地方使用了类似的代码。这也将阻止WPCS抱怨压痕。

嗯,IMO,这些警卫不应该在核心区。为什么?堆芯应能自行加载。这些类在加载插件或主题之前提前加载到内存中。因此,类_存在()在Core中是不必要的,因为当Core加载时,Core类的另一个实例不应该已经在内存中。

也就是说,代码扩展Core确实需要这些保护。例如,古腾堡需要这些保护来防止加载同名类。

#8 随访: @dmsnell公司
15个月以前

请原谅我的无知,但为什么我们要取消这些检查提供的安全性?基于现有的代码库,我的印象是,这种做法有点规范,也很重要,因为我还见过人们无意中用要求它们已经存在,因此在不需要它们的地方造成了崩溃。

这就是为什么我喜欢在检查中包装每个类,但考虑到linter想要缩进整个文件,我将它们移到wp-html.php软件作为妥协。

如果Gutenberg中的一个版本是以某种方式首先加载的,我不会认为这有问题。我们不想在未来破坏API。

@阿佐兹对发表了评论采购订单号3920:


15个月以前
#9

我认为我们甚至不应该在这里包括那些警卫——毕竟,科尔是最“规范”的

Core没有责任检查其类是否已经在内存中。

这取决于:)

我在这里得到的是古腾堡的PHP(在/图书馆)和core的PHP应该被视为相同的代码库.我不会反对类_存在()函数_exists()无论是现在还是将来,当他们能够防范可能的致命错误时,都是核心。

如果Tag Processor的类(文件)总是从wp-settings.php加载,这比任何插件都要早,我同意类_存在()只能在古腾堡。对于其他情况(条件加载等),两个地方都应该有它们。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#10

@costdev我已经将我们的一些对话标记为已解决,以减少阅读此PR时的噪音,但如果您没有发现它们已解决,请取消解决并告诉我。通常我不会这样做,但你建议了这么多无争议的更改,我想一旦我接受了你的更改,如果我将它们隐藏在聊天中,那将是最容易的。

#11 答复: 8 @hellofrom托尼亚
15个月以前

回复dmsnell公司:

请原谅我的无知,但为什么我们要取消这些检查提供的安全性?基于现有的代码库,我的印象是,这种做法有点规范,也很重要,因为我还见过人们无意中用要求它们已经存在,因此在不需要它们的地方造成了崩溃。

这就是为什么我喜欢在检查中包装每个类,但考虑到linter想要缩进整个文件,我将它们移到wp-html.php软件作为妥协。

如果Gutenberg中的一个版本是以某种方式首先加载的,我不会认为这有问题。我们不想在未来破坏API。

好问题。原因如下:

  1. 核心加载优先于插件和主题。
  2. 文件在请求周期的早期加载。这些分为wp-设置.php.
  3. WordPress核心的代码本身就是原生的。期望Core不需要保护自己的函数、特性、类等免受可能也使用相同自定义命名约定的自定义代码的影响。请注意,在Core中,它没有将每个类或函数包装在*_存在()在将其加载到内存之前。那是故意的。为什么?因为期望是:
    • 这些函数、类等是WordPress Core固有的。
    • 插件和主题负责保护任何复制本机核心函数、类等的自定义代码,以防止出现致命错误。

由于Core在插件或主题之前加载这些文件*_存在()包装是不必要的。为什么?

  • 首先加载内核,因此不应存在已加载到内存中的重复名称。
  • Core的代码是Core的本机代码。请参阅原因3中的上述预期解释。

看看Core中的REST、Sitemaps和其他API。请注意,它们没有被包装*_存在()。请查看Core中的所有功能。请注意,它们没有被包装函数_exists().

这对@dmsnell有帮助吗?
为什么HTML API文件存在风险,而其他本机核心函数、类等没有风险,这有一个令人信服的原因吗?

#12 @hellofrom托尼亚
15个月以前

6.2中使用此API的功能有哪些?
Core中已有的哪些块(即6.2之前的块)将更改为使用API?

我询问以下原因:

  • 性能分析。

我请@flixos90进行绩效评估。知道哪些功能将使用它,可以为在现有块(即已经在Core中的块)之前和之后进行测试提供所需的信息。

我对性能回归的潜在引入感到好奇和担忧。为什么?与PHP本地正则表达式和字符串函数相比,需要执行大量代码。消除这些顾虑以进行性能审查以收集数据的方法。

  • 测试。

测试用法以验证API是否按预期工作。

  • 评估用户风险。

对于将更改为使用此API的现有块(在<=WP 6.1.x中),与6.2版本相比,希望在之前(6.1.x版本)进行测试。为什么?信心检查,以识别升级到6.2的用户的任何标记更改或潜在损坏。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#13

@hellofromtonya在1fd0d7d511中提出了您的大多数建议,但最终修改了大部分措辞,以完全避免这种情况,并避免被动语态(我确信我做得不一致)。感谢对文档的全面审查;这是我在这个项目合并前的最高优先事项之一。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#14

@hellofromtonya@anton-vlasenko我已经预先将您开启的许多讨论标记为已解决,尽管我通常不会这样做。这仅仅是因为这篇公关文章中的评论越来越难被人理解,而Github在默认情况下隐藏了其中的许多评论,这让事情变得更加困难。

如果这些更改中有任何不符合您的要求,请告诉我,我将取消标记。

@你好,来自tonya@TODO公司WP_缺陷必要吗?这似乎是多余的,特别是因为WP_缺陷_这是对我们是否处于开发模式的测试,至少在这里是这样的。我可以把它们加进去,但似乎也是这样,如果我们一致,那么我们就需要注释WP_缺陷,这与简单地拥有WP_缺陷-我可能错过了什么。为此,我还没有加入它们,除非它们传达的是我没有领会的东西。

@hellofrom托尼亚对发表了评论采购订单号3920:


15个月以前
#15个

@hellofromtonya是否需要WP_DEBUG上的@TODO?这似乎是多余的,尤其是因为WP_DEBUG是测试我们是否处于开发模式的测试,至少在这里是这样。我可以将它们添加进来,但如果我们保持一致,那么我们需要注释WP_DEBUG的每次使用,这与简单地使用WP_DEBU没有什么不同-我可能遗漏了一些东西。为此,我还没有加入它们,除非它们传达的是我没有领会的东西。

是的@待办事项是必要的。为什么?这是使用协议的一部分WP_缺陷在WP 6.2的源代码中。我分享了包括@azaozz@felixantz@spacedmonkey和我在内的委员会之间讨论和达成协议的链接。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#16

是的,@todo是必需的。为什么?这是自WP6.2起在源代码中使用WP_DEBUG协议的一部分。我分享了包括@azaozz@felixarntz@spacedmonkey和我在内的委员会之间讨论和达成一致的链接。

感谢您的澄清。我不知道这是否是Github隐藏讨论的另一个案例,但我已经查看了这些链接,发现您在其他地方添加了TODO,但错过了讨论以及与之相关的任何决定。

我回去做了三次检查,以确保我打开了Github中所有隐藏的评论。我会添加TODO,但如果在这些链接中有什么你想让我看到的,我不知道它是什么,除了在一些PR中你添加了TODO之外,这并没有特别说明什么。

@弗利克索斯90对发表了评论采购订单号3920:


15个月以前
#17

@hellofromtonya@dmsnell FWIW我不认为@待办事项周围的评论WP_缺陷这里需要。这不是任何用途WP_缺陷现在需要这样注释。

在本次公关中,WP_缺陷仅用于调试输出,这是其主要目的。在其他一些PR中,我们需要此注释的原因是,在这些PR中我们误用了WP_缺陷(关于缺乏更好的替代方案,请参阅https://core.trac.wordpress.org/ticket/57573https://core.trac.wordpress.org/tickt/57487)决定是否缓存主题.json相关数据-WP_缺陷不是为了控制。

所以TLDR我不认为@待办事项注释在这里是相关的,因为它是一个实际的调试用例。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#18

不建议在WordPress核心中引入新的API而不使用它。

谢谢@felixantz——我非常感谢关于不使用API的问题。就上下文而言,这只是在最后一刻才出现,因为我们中的一些人,包括我在内,没有意识到使用它的代码已经进入了6.2。

目前,它正在与块支架和几个块一起使用。我(很糟糕)理解这些代码也会合并,但考虑到开发的路径,我认为最好将其分为不同的PR。首先,其中一些功能之前没有使用过,这意味着从无标签处理器到标签处理器没有差异(还有一些转换,链接到上面的公关描述的底部)。其次,我还没有接触到所有开始依赖标签处理器的工作,所以我是最没有能力将工作推进到核心的人之一。

也许有人在等我为其他事情创建PR,但如果是这样,我还没有理解(@ockham我应该为块支持和块更新创建PR吗?)

所以我希望这会有所帮助,尽管我不确定这会给我们留下什么。这里的设计100%是由Gutenberg插件中的use-cases主导的,除了一包特殊的RegExp模式和字符串替换之外,没有真正的先前技术,它们起着类似的作用,但并不打算将HTML语义放在首位。如果插件中的这一点进展顺利,那么将会有更多的东西出现,古腾堡回购中也有大量的工作,但就目前而言,这是古腾堡新代码中的一个新东西。

重申一下:我确信我们可以在这个PR中添加更多的代码,但考虑到在现有代码中引入标记处理器的实际代码非常有限,或者作为构建新功能或更新功能的一个单独步骤来完成,这可能会非常混乱。

我认为这样的大规模公关是不可能的

是的,我完全理解,不过如果有愿望的话,我很乐意分享它的运营概况。至少,我认为彻底阅读这些评论将有望很好地解释它。

从好的方面来看,这已经与至少六个人合作开发,并在古腾堡和WordPress.com的部分网站上进行了大量审查。

如果没有必要在其中包含一个完整的系统,我会尝试将其拆分为更小的部分。

在这段代码中有几个@todo注释,这对我来说意味着“黄金时段”还没有准备好。

这些不应该是信号。在合并之前,我肯定还有一些剩余的TODO要处理,但文件顶部的条目几乎都是关于如何增强或扩展系统的设计注释;并不是说它还没有准备好。

有三个相关的待办事项:

  • 我们是否可以在Core中的PCRE模式上使用Unicode标志,或者对于缺少Intl扩展的站点来说,这是一个问题?
  • 我今天在审核代码时发现了一个项目,希望明天能删除它;这是一个特例,我认为我们没有在实践中测试或看到。
  • 关于我留下的设计限制的注释,因为我认为我们可以删除该部分,而不是扩展TODO。

其他的可以从TODO项转换为某人可能想要做的事情的描述😉

我认为@todo注释在这里不相关,因为它是一个实际的调试用例。

谢谢;这就是我想的结果,但我会等到@hellofromtonya回应后再把它们拿出来。

@ntsekouras公司对发表了评论采购订单号3920:


15个月以前
#19

@felixarntz在英国已经有地方使用这些类了,我认为最好不要在这个PR中添加太多东西。我们正在等待这个PR的发布,以便在本公关,在这里您可以看到它的使用方式。

@hellofrom托尼亚对发表了评论采购订单号3920:


15个月以前
#20

所以TLDR我认为@todo注释在这里不相关,因为它是一个实际的调试用途。

感谢您澄清@felixantz!嘿@dmsnell,我会更新我的建议,删除@待办事项要求。似乎不需要。

@弗利克索斯90对发表了评论采购订单号3920:


15个月以前
#22

谢谢@gziolo,这非常有用。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#23

@felixantz我忘了我不是WordPress-develop repo的成员,所以我不能针对这个创建PR并在这里显示出来,但我已经在我的fork中创建了它https://github.com/dmsnell/wordpress-develop/pull/1

我可以重新创建它,这样它就有目标了大旅行箱这里,它将出现在本次回购的PR列表中,但我想减少噪音可能会有所帮助。甚至WordPress/Gutenberg#46625移植有点棘手,因为它的一半适用于元素,它已经存在于WordPress中,而另一半应用于设置,这是6.2中的新增功能。

我很高兴根据您的需求重新安排提交、分支和公关,只需告诉我您的偏好即可。

@弗利克索斯90对发表了评论采购订单号3920:


15个月以前
#24个

谢谢@dmsnell,这已经足够了。我去看看。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#25

推送了28e9bf3595,其中包含了我真正想点击的最后一项预合并。它主要是内部组件重命名和注释扩展的组合,澄清了我认为这个系统中最让我困惑的部分-获取更新的html()。如果它不小心破坏了任何测试,那么我会修复这些。

最后一个问题是我希望有人回答谁知道:我们可以在Core中使用活动的Unicode标志进行PCRE模式吗?如果不能,我们不妨删除属性名称检查,或者至少删除其中针对US-ASCII范围以上的字符进行验证的部分。这不是系统的关键部分,此时删除它比引入UTF-8解码器更容易。

我所知道的最后想在这个类中更新的唯一剩下的事情是添加适当的HTML字符引用处理。此_不适用于6.2_,但可能适用于6.3。在WordPress/Gutenberg中,一份有效的公共关系已经初具规模#47040较少的是API/接口更改,更多的是错误修复(遗憾的是,PHP没有也从来没有合适的字符引用解码器)。与此同时,大多数人不会注意到不符合规定的行为,而这种破坏行为在任何人依赖的地方都是普遍存在的html实体代码()。这既不是标记处理器独有的,也不是它引入的。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#26

如果所有相关人员都满意,我更愿意在合并之前重写这个分支,这样我们就可以确保提交消息和提交是正确的、可通信的和相关的。

我无法请求更改我自己的公关,但如果有人代表我代理请求更改,我将不胜感激,这样我们就不会在最后一个通信步骤发生之前意外合并。抄送:@ockham

@阿佐兹对发表了评论采购订单号3920:


15个月以前
#27

不合并PR,但必须提交到svn

好的,基本工作流程是从这里将请购单中的所有更改作为.diff:https://patch-diff.githubusercontent.com/raw/WordPress/WordPress-develop/pull/3920.diff然后将该差异应用于核心主干的SVN签出并从那里提交。(请参阅上的说明下的“查看修补程序”按钮https://core.trac.wordpress.org/ticket/57575).

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#28

@costdev我已经运行了所有测试,并删除或调整了大多数@封面电话。在许多情况下,对于测试是否涵盖一组给定的方法,没有明确的是或否。获取更新的html()的行为几乎被所有的测试方法所覆盖,但并不是直接测试它的行为,因为所有的修改方法和获取更新的html()是紧密耦合的。

为此,我试图根据语义操作的涵盖范围来重新定义这些概念。我找不到一个好方法来保持你想要的一致性,所以这是最好的说法,“对于想要使用的人来说设置属性()要更改文档,此测试将涵盖该情况,尽管仅通过检查是不可能测试的set_attribute()"

@安东·弗拉森科我加了一句做错了我们到处都在报告一定会失败的事情。谢谢你的建议。

@dmsnell公司对发表了评论公共关系编号3920:


15个月以前
#29

有人知道在测试中断言_做错了被呼叫了?

@彼得威尔逊公司对发表了评论采购订单号3920:


15个月以前
#30

有人知道在测试中断言_做错了被呼叫了?

你可以使用setExpectedIncorrectUsage(设置预期使用不正确)

https://github.com/WordPress/WordPress-develop/blob/ab7f91562deaaa5eac5fd64c11dd38fe687f48db/tests/phpunit/tests/db.php#L1521

#31 @吉奥罗牌手表
15个月以前

#56299个被标记为副本。

@吉奥罗牌手表对发表了评论采购订单号3920:


15个月以前
#32

不合并PR,但必须提交到svn

好的,基本工作流程是从这里将请购单中的所有更改作为.diff:https://patch-diff.githubusercontent.com/raw/WordPress/WordPress-develop/pull/3920.diff然后将该差异应用于核心主干的SVN签出并从那里提交。(请参阅上的说明下的“查看修补程序”按钮https://core.trac.wordpress.org/ticket/57575).

我喜欢这个能处理一切的命令:

{{{bash
npm run grunt补丁:https://github.com/WordPress/WordPress-develop/pull/3920
}}}

@hellofrom托尼亚对发表了评论公共关系编号3920:


15个月以前
#33

大家好👋

###状态更新:

  • 请求的更改:

几个提交人已经审查并请求更改,但这些更改都不影响功能,但对于提交考虑至关重要(因为我们提交人要求对提交到Core中的所有代码进行相同类型的更改)。

  • @6.2性能主管felixantz正在积极进行性能评估。

我请他做这个评估。为什么?通过数据了解当用户升级到6.2时,是否会对使用此API的块/内容的用户产生影响_根据数据,这个未知的问题可以(a)消除,或(b)已知以供进一步考虑。

为什么?本机PHP RegEx和str功能比此API更快。因此,最好能知道用户升级到6.2是否会对性能产生影响。

###提交建议

目标:立即提交国际单项体育联合会满足所有要求:

  1. 提交人要求的所有更改都提交到此PR中。
  2. 未发现明显的性能回归。

如果满足上述两个条件,则提交。
嘘,我打电话给@azaozz,请他在工作日(因为他工作到我一天结束时)考虑一下。

为什么是今天?
此API正在阻止其他功能/增强后端口。Beta 1将于周二发布。让我们尽力解决今天可以解决的问题。然后确定未知或问题,而无需在Beta周期中观察和监控数据。

这个计划听起来怎么样?👍 👎
@费利萨尔茨@dmsnell@ockham@ntsekouras@azaozz@costdev@gziolo@anton-vlasenko

@dmsnell公司对发表了评论公共关系编号3920:


15个月以前
#34

如果我错了,请纠正我,但我认为我注意到脚本标记的解析是老派的,但没有看到任何测试。除非我漏掉了什么,否则也可以测试一下吗。

@peterwilsoncc您应该在中找到几个脚本标记处理测试,包括您提到的案例`测试文本标签内容`。您注意到的确切字符串不在测试中,但它已被现有测试覆盖并得到正确处理。

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

  • 焦点 性能已添加

#36 @hellofrom托尼亚
15个月以前

  • 关键词 请求的更改已添加

标记为请求的更改以反映第3920页.

@hellofrom托尼亚对发表了评论采购订单号3920:


15个月以前
#37

状态更新:

跟进https://github.com/WordPress/WordPress-develop/pull/3920#问题评论-1413760031.

  • 所有请求的更改都已完成

还有什么要承诺?

  • 提交人批准:目前还没有提交人批准此请购单
  • 完成我要求@felixantz做的绩效评估

我的周末很快就要开始了(只要我清除了我的后台审查和提交队列,不包括这个公关)。我星期一回来。在周一之前提交这份公关的决定权在@azaozz和@felixarntz手中。

@azaozz@felixantz如果达成一致意见,请在批准后尽快提交。为什么?其他工作取决于此PR。因此,如果它进入6.2,越早越好。

感谢大家的贡献、耐心和专业知识!

抄送@ntsekouras和@Mamaduka以提醒您。

@hellofrom托尼亚对发表了评论采购订单号3920:


15个月以前
#38

为了提高透明度,今天有人问我:
为什么不提交它,然后在Beta或RC期间进行性能回归测试?

我的回答是:

我要求在提交之前完成的原因是:

如果有一个性能回归可以保证这不会发生,那么所有其他的工作都取决于它需要返工和更改计划。这需要尽快知道。等待稍后执行意味着将这些功能和6.2版本置于危险之中。

@弗利克索斯90对发表了评论公共关系编号3920:


15个月以前
#39

我通过以下途径对此进行了性能测试#3971,一个纯粹用于测试的PR,它直接基于此处的此PR,但也包括来自#3914https://github.com/dmsnell/wordpress-develop/pull/1(请参见https://github.com/WordPress/WordPress-develop/commit/8d7ebfb21c643088139e178e2f67bedecc49791b).

TLDR:性能影响似乎可以忽略不计,这是一个很好的结果。绩效没有明显的上升或下降趋势。总的来说,如果有什么数据的话,那就是这个PR比大旅行箱今天。差异太小,无法肯定地说出来,但至少现在应该清楚,从性能角度来看,这不是一个问题。👍

测试基于古腾堡演示内容,使用最后三个默认主题进行测试,每个场景中使用20个请求的中位数(#3971大旅行箱).

请参见这个电子表格以获取数据,并说明测试是如何进行的。

所以我认为现在应该解除封锁。谢谢大家的耐心,我真的很高兴看到这个积极的结果。

@hellofrom托尼亚对发表了评论采购订单号3920:


15个月以前
#40

我要求的性能回归测试是什么?

对于现在位于Core中(<=6.1)但将更改为使用此API的块或功能,当用户升级到6.2时对性能有何影响?

为什么?
与运行RegEx和/或PHP原生字符串函数相比,此API将执行大量PHP代码_这将产生影响_影响有多大尚不得而知。为什么?此类测试尚未进行。

需要从回归测试中收集数据,以了解升级到6.2版本的用户会受到什么影响。这些信息将有助于决定这种影响是否可以接受。

此API有很多优点。例如,它将使维护字符串操作更容易理解。它将帮助解决在PHP中使用HTML标记的挑战(空格、格式错误等),尽管这些挑战一直存在。也就是说,它还必须具有性能,以免给用户带来问题。

@dmsnell公司对发表了评论采购订单号3920:


15个月以前
#41

请注意:我在顶部的描述中的详细信息标签中发布了一条提交消息。修复了来自吉特提交消息,我更新了core而不是GitHub的props语法

#42 @hellofrom托尼亚
15个月以前

  • 关键词 请求的更改远离的

卸下请求的更改关键字,因为所有更改都已在PR中解决。

#43 @阿佐兹
15个月以前

  • 所有者设置为阿佐兹
  • 分辨率设置为固定的
  • 状态已从更改新的关闭

55203:

引入带有HTML标记处理器的HTML API

此提交从Gutenbeg存储库中提取HTML标记处理器。

标记处理器试图成为一个符合HTML5规范的解析器,它在PHP中提供了查找特定HTML标记的能力,然后添加、删除或更新该标记的属性。它提供了一种安全可靠的方法来修改HTML标记上的属性。

更多信息:https://github.com/WordPress/WordPress-develop/pull/3920.

道具:安东万弗拉森科、伯恩哈德·雷特、科斯特夫、德姆斯内尔、费利克萨尔茨、吉奥罗、希洛夫罗姆托尼亚、齐拉达姆、弗利克索斯90、ntsekouras、彼得威尔逊克、瑞士斯皮迪、安德鲁斯隆、onemaggie、get_dave、阿里斯托斯、斯克里芬、justlevine、andraganescu、noisocks、dlh、soean、cbirdsong、revgeorge、azaozz。
修复#57575.

#45 @阿佐兹
15个月以前

55206:

修复内联文档中的几个拼写错误。

道具:铁编程器。
请参见#57575.

@齐拉达姆对发表了评论采购订单号3920:


15个月以前
#46

这太棒了,我真的很感谢大家在这方面的合作❤️

#47 @铁编程器
15个月以前

  • 关键词 has-testing-info(有测试信息)已添加

虽然已经合并了,但我在这里添加了示例测试说明,以帮助测试贡献者在6.2的预发布周期中对此进行审查。

请不要报告此票据上的错误,而是作为新Trac票进行适当的跟踪和分类。

测试说明

测试步骤

  1. 安装`WP_HTML_Tag_Processor`测试插件(安装信息在插件的标题中)。
  2. 启用插件。
  3. 创建帖子,并插入段落块。添加一些文本。
  4. 在段落文本中,向内部和外部URL添加超链接,然后发布文章。
  5. 查看帖子。
  6. 观察渲染的输出以及修改后的标记(通过View Source)。

预期结果

补充人工制品

https://cldup.com/EJ0VQSmbwa.png
图1:测试插件的示例输出。

其他信息

希望“修补”HTML标记处理器API的测试人员也可以考虑尝试一下“沙盒”插件,它提供了新功能的快速视觉反馈,并演示了API的一些使用方法。

这张票是在采购订单号4112WordPress/WordPress-develop开发通过@dmsnell公司.


14个月以前
#48个

当引入HTML API时,许多字段从私有的可见性受保护的这样Gutenberg和其他系统可以通过子类化更容易地增强行为。这个$this->html属性被忽略了,但对于使用标记处理器粘贴HTML的系统来说很重要,特别是在内部HTML内部文本.

此修补程序将可见性更新为在39bfc2580d9b0ea7e6ff45b8d904408d925cbc4b中引入API时的可见性。

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

抄送:@adamziel@ockham@azaozz

@吉奥罗牌手表对发表了评论采购订单号4112:


14个月以前
#49个

我们可以重复使用https://core.trac.wordpress.org/ticket/57575.我会处理的。

#50 @吉奥罗牌手表
14个月以前

55402:

HTML API:将$this->HTML设置为protected以支持子类化

当引入HTML API时,许多字段从私有可见性切换为受保护,这样Gutenberg和其他系统可以通过子类化更容易地增强行为。$this->html属性被忽略了,但对于使用Tag Processor来缝合html的系统来说很重要,特别是在innerHTML和innerText上执行操作。

后续行动[55203].
道具dmsnell。
请参见#57575.

@齐拉达姆对发表了评论采购订单号4112:


14个月以前
#52个

注意,还有一些属性可能必须公开才能支持完整的HTML解析–我现在遇到了访问问题我的其他公关。但是,在6.2中包含这些都不重要,因为我们仍然不知道新API是什么样子的。

这张票是在采购订单号4115WordPress/WordPress-develop开发通过@齐拉达姆.


14个月以前
#53

##描述

使用此PR搜索()正确查找标签关闭器上设置的书签。它:

  • 使用正确的起始索引标记更近的书签
  • 添加数组(“tag_clossers”=>“visit”)在里面搜索()

###关于书签开始索引:

在标签上设置书签时,应在开始“<”之前设置其“开始”位置,例如:

测试a书签</b>----------------^

当前的计算假设这始终是$tag_name_starts_at左边的一个字节。

然而,在索引指向索利多金币符号“/”的标签闭合器中:

测试a书签</b>----------------------------^

因此,书签应该在标记名之前的两个字节开始:

测试a书签</b>---------------------------^

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

抄送@ockham@dmsnell@gziolo

#54 @hellofrom托尼亚
14个月以前

开的#57787用于改进和修复@zieladam的PR中的1字节关闭问题https://github.com/WordPress/WordPress-develop/pull/4115.

#55 @hellofrom托尼亚
14个月以前

  • 关键词 需求-开发说明 现场附加指南已添加

@dmsnell公司对发表了评论采购订单号4112:


14个月以前
#56

@阿达齐尔$个书签已在Core中受到保护。
您使用的是代码的预合并版本吗?

@齐拉达姆对发表了评论采购订单号4112:


14个月以前
#58

哦!嗯,也许我是。谢谢!

@阿佐兹对发表了评论采购订单号4112:


14个月以前
#59

@azaozz我把你包括在这里,因为我想尝试把这个放到6.2中。我应该为它创建Trac票证吗?

呃,很抱歉回复太晚了,刚才看到这个:(

是的,因为HTML API已经在核心中,所以可以在测试期间添加任何错误修复或“代码清理”。错误修复也可以在RC期间添加,但通常是为“较大”的错误和边缘情况保留的,例如在某些情况下出现致命错误等。

对于像这样的小变化,通常不需要新的票。新的trac票证适用于更大的错误修复以及RC期间修复的错误。

文档(docblock)和测试可以随时添加,通常最好为它们添加新的标签,尤其是在更改更大的情况下。

#60 @hellofrom托尼亚
14个月以前

55469:

HTML API:修复查找RCData和Script标记闭合器的问题。

修复了查找以下标记闭合器的问题</script>,</text区域>、和</title>在里面WP_HTML_Tag_处理器.

后续行动[55407],[55203].

道具齐拉达姆、德姆斯内尔、希罗弗洛姆托尼亚。
修复#57852.
请参见#57575.

#61个 @你好,Tonya
14个月以前

55477:

HTML API:记录next_tag()的简写用法。

记录速记用法,即。$this->next_tag(“img”),第页,共页WP_HTML_Tag_Processor::next_Tag().

还包括类文档中的表格对齐和格式调整。

后续行动[55203],[55206].

道具zieladam、poena、dmsnell、costdev、hellofromTonya。
修复#57863.
请参见#57575.

#62 @谢尔盖·比尤科夫
13个月以前

  • 组件已从更改编辑器HTML API
注:请参见TracTickets公司有关使用的帮助门票。