WordPress 6.7 引入了一项新功能,允许插件提高注册其块wp_register_block_metadata_collection()类型的性能,特别是对于注册多种块类型的插件。
将 WordPress核心行为扩展至插件
自 WordPress 6.1 以来,WordPress Core 已包含一种机制来提高加载所有内置块类型的性能:作为构建过程的一部分,各个block.json文件将被解析为一个blocks-json.php文件,该文件以数组形式返回其所有数据。显著提高了性能,避免了在每个 WordPress 请求上执行许多昂贵的文件系统和JSON操作。有关原始更改的背景信息,请参阅#55005。
不过,这种机制的实现方式仅适用于 WordPress Core 本身。到目前为止,插件还无法实现相同的好处。尤其是对于本身包含许多块类型的插件来说,这实际上意味着性能损失。这种情况将在 WordPress 6.7 中改变。
注册块元数据集合
插件现在可以选择性地注册PHP “清单”文件,其中包含其块类型的所有元数据。对于正在注册的任何块类型,WordPress Core 现在将检查是否存在涵盖该块类型的清单文件,如果存在,它将使用清单文件中的数据,而不是block.json直接读取和解析块类型的文件。
为了使用这个新功能,插件开发人员需要使用新wp_register_block_metadata_collection()函数,它需要两个参数:
$path:集合的块文件所在的基本路径。
$manifest:集合的清单文件的路径。
每个block.json应作为集合一部分的文件都必须位于提供的 中$path,位于其自己的与块类型名称(不带块命名空间)匹配的目录中。
注意:注册块元数据集合并不能取代注册单个块类型的需要。仍然需要对集合中的每个块类型调用register_block_type()或register_block_type_from_metadata()。使用新功能是可选的,以提高性能,但强烈建议使用此功能,特别是对于注册多种块类型的插件。
自动生成块元数据收集清单
插件开发人员负责生成和维护他们为插件的块类型元数据集合注册的清单文件。为了简化此过程,社区在NPM 包中实现了一个新命令build-blocks-manifest,该命令作为版本 30.3.0 的一部分发布。@wordpress/scripts
该wp-scripts build-blocks-manifest命令接受两个参数:
–input:块类型所在的目录。默认值为“build”。
–output:存储构建块元数据收集清单的文件路径。默认为“build/blocks-manifest.php”。
实际上,此命令的参数等同于的参数wp_register_block_metadata_collection():–input参数等同于参数$path,–output参数等同于参数$manifest。
完整示例
对于这个例子,假设你有一个my-block-library注册了 3 种块类型的插件:
my-block-library/pricing
my-block-library/services
my-block-library/testimonial
这些块类型的源代码在插件的目录中实现src,更具体地说是在以下目录中:
src/pricing用于my-block-library/pricing块。
src/services用于my-block-library/services块。
src/testimonial用于my-block-library/testimonial块。
通过使用现有wp-scripts build命令,代码将被构建到插件的build目录中,并且每个块类型都有相同的子目录。
运行构建后,可以用新wp-scripts build-blocks-manifest命令。由于插件使用其块类型的默认位置,因此无需向命令传递任何参数。只需运行wp-scripts build-blocks-manifest,它将block.json从目录中读取所有三个块的元数据build并将它们合并到一个build/blocks-manifest.php文件中。
清单文件看起来是这样的:
<?php
// This file is generated. Do not modify it manually.
return array(
‘pricing’ => array( /* Block metadata. */ ),
‘services’ => array( /* Block metadata. */ ),
‘testimonial’ => array( /* Block metadata. */ )
);
将来,当对块类型及其实现进行更改时,可以使用相同的两个命令:
wp-scripts build
wp-scripts build-blocks-manifest
生成清单文件后,现在可以注册块元数据集合,如下所示:
wp_register_block_metadata_collection(
WP_PLUGIN_DIR . ‘/my-block-library/build’,
WP_PLUGIN_DIR . ‘/my-block-library/build/blocks-manifest.php’
);
最后重要的一点,不要忘记注册实际的块类型:
register_block_type_from_metadata( WP_PLUGIN_DIR . ‘/my-block-library/build/pricing’ );
register_block_type_from_metadata( WP_PLUGIN_DIR . ‘/my-block-library/build/services’ );
register_block_type_from_metadata( WP_PLUGIN_DIR . ‘/my-block-library/build/testimonial’ );
总结
新功能wp_register_block_metadata_collection()及其工具支持@wordpress/scripts是提高插件注册块类型性能的强大组合。它们使这个过程变得轻松简单,因此如果插件注册块类型,可以考虑将这个方法纳入开发工作流程和插件代码库中。
