WordPress 6.5 通过新翻译格式文件显著提高加载速度

2024-03-2607:34:55网站建设与开发Comments417 views字数 1936阅读模式

WordPress 开发者仔细分析了 WordPress 现有的 i18n 系统的性能,并最终创建了一个新的名为「Performance Translations」(高效翻译)的功能插件:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

WordPress 6.5 通过新翻译格式文件显著提高加载速度

该插件提供了一个全面改进的性能更好的语言包加载系统,在经过成千上万用户的测试之后,WordPress 6.5 核心代码中已经内置了该插件的功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

这个新功能在加载语言包文件时更快,并且使用的内存更少,并且还支持同时加载多个语言环境,这使得语言环境切换也变得更快。除此之外,它还支持包含在 PHP 格式的翻译文件,这样既可利用 OPCache 对其进行加速。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

WordPress 6.5 通过新翻译格式文件显著提高加载速度

新的.l10n.php 翻译文件格式

现在从 WordPress.org 下载的语言包里面,除了原来就有的 .mo 和 .po 文件之外,可能还会多出一个 .l10n.php 新文件 ,如果有该格式的文件,WordPress 6.5 就优先通过它来加载语言包,该文件使得翻译加载更快,并用到的内存更少。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

这是一个渐进式的增强,意思是如果只有 .mo 文件而没有 .l10n.php 文件,WordPress 依旧通过加载 .mo 文件来加载语言包,反之亦然,因此理论上现在语言包里面可以只有 .l10n.php 文件,但是目前 WordPress 还是需要有对应的 .mo 和 .po 文件,主要用于语言包的更新检查,不过这个限制将来会得到解决。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

如何生成新的 .l10n.php  文件

如果要生成新的 PHP 翻译文件,GlotPress 的 4.0 版(translate.WordPress.org 的支持插件)已经支持新 .l10n.php 格式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

除此之外,WP-CLI 2.10.0 ( i18n-command2.6.0) 也提供了一个新的命令 wp i18n make-php,可以根据 .po 文件创建翻译 PHP 文件:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

# Create PHP files for all PO files in the current directory.
$ wp i18n make-php .

# Create a PHP file from a single PO file in a specific directory.
$ wp i18n make-php example-plugin-de_DE.po languages

如果是 WordPress 插件开发者,还可以使用新 WP_Translation_File 类将文件转换 .mo 为翻译 PHP 文件:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

$contents = WP_Translation_File::transform( $mofile, 'php' );
if ( $contents ) {
	file_put_contents( $path_to_php_file, $contents );
}

禁用 .l10n.php  文件

如果出于某种原因想禁用翻译 PHP 文件的支持,可以使用新的 translation_file_format filter 来改变翻译文件的首选格式(默认是 php):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

add_filter('translation_file_format', fn () => 'mo');

此外 WordPress 6.5 还提供了一个新的 filter load_translation_file,可以用它来更改翻译文件的路径。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

$l10n 全局变量

我们知道 WordPress 使用全局变量 $l10n 来存储已加载的翻译,在 WordPress 6.5 之前,这个全局变量是 MO 类的实例,它用于读取 .mo 文件提供的翻译字符串,随着 WordPress 6.5 的更新,$l10n 全局变量将改为 WP_Translations 类的实例。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

WP_Translations 类充当了一个桥梁,维持了与 MO 类相似的特性和接口,以确保向后兼容性。通过这种方式,WordPress 可以透明地处理新的 PHP 翻译文件格式,同时保持对旧的 .mo 文件格式的支持。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

缓存语言文件路径列表

此外,WordPress 6.5 还有个优化改进,在 6.5 之前,像 get_available_languages() 这样的函数 和 WP_Textdomain_Registry 这样的类,每次都是直接使用 glob() 函数搜索 .mo 文件,这可能导致一些性能问题,特别是在拥有很多翻译或在文件系统较慢的环境中的网站上。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

因此,WordPress 6.5 引入了新的缓存机制,通过 WP_Textdomain_Registry 类集中查找翻译文件,然后将其存储在 group 为 translations 的对象缓存中,缓存键的格式为 cached_mo_files_<hash>,其中 <hash> 是扫描目录的 MD5 哈希值,例如 wp-content/languages,并且每当更新语言包时,缓存就会被清除。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/62599.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/cms/62599.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定