inpsyde/translation-cache

此包已被废弃且不再维护。没有建议的替代包。

通过使用WordPress对象缓存来缓存翻译文件,提高网站性能。

安装次数: 4,738

依赖项: 0

建议者: 0

安全: 0

星标: 42

关注者: 10

分支: 4

开放问题: 2

类型:wordpress-plugin

1.0.3 2019-01-21 15:33 UTC

This package is auto-updated.

Last update: 2024-08-05 14:07:37 UTC


README

通过使用WordPress对象缓存来缓存翻译文件,提高网站性能。

描述

'Inpsyde Translation Cache' 使用 WP Object Cache 机制缓存翻译 .mo 文件。

当使用 持久缓存插件 时,该插件的性能优势可以体现出来,因为默认情况下,WordPress对象缓存不会“存活”于单个请求中,并且翻译文件在WP中已经按请求进行了缓存。

因此,默认情况下,如果没有安装持久缓存插件,该插件将不执行任何操作。

MU插件自安装

考虑到许多插件都有自己的语言文件,为了允许缓存插件翻译,'Inpsyde Translation Cache' 必须作为 MU插件 运行。

因此,'Inpsyde Translation Cache' 在安装时将主文件复制到MU插件文件夹,以便作为MU插件工作。

尽管“常规”插件仍然处于激活状态,但它什么也不做,或者更好的说法,它被列出以禁用,以便删除MU插件的副本。

实际上,当“常规”插件被禁用时,MU插件的副本将被删除(除非它已被修改)。

请注意,在某些配置中,此“自安装”过程可能无法正常工作,例如,如果MU插件文件夹不可写。

在这种情况下,'Inpsyde Translation Cache' 将继续作为常规插件工作,但它将无法缓存在 'plugins_loaded' 钩子触发之前加载的翻译文件。此外,还会显示一个管理通知,建议用户手动将主插件文件复制到MU插件文件夹以提高性能。

缓存失效

'Inpsyde Translation Cache' 存储所有文本域

  • 核心
  • 插件
  • 主题

这意味着当安装这些组件的新版本时,需要清除缓存。

自动失效

对于WordPress核心翻译的失效,插件依赖于WordPress版本:如果版本更改,则所有缓存的内核翻译都将失效。

对于插件和主题,事情则不那么直接。

'Inpsyde Translation Cache' 使用 'switch_theme' 钩子来失效旧主题和新主题的缓存。

它还使用 'activated_plugin''deactivated_plugin' 来失效插件的缓存。

然而,为了失效主题和插件的缓存,'Inpsyde Translation Cache' 需要知道它们使用的文本域。

为此,'Inpsyde Translation Cache' 使用插件和主题的 'TextDomain' 文件头。

考虑到 'TextDomain' 文件头不是强制性的,可能存在一些插件或主题没有提供该头部(即使它们应该提供)。

手动失效

在这种情况下,可以通过调用 Inpsyde\MoCache::flush_cache() 方法“手动”失效缓存。

例如,假设有一个插件加载了一个文本域,如下所示

 load_plugin_textdomain( 'some-plugin-txt-domain', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); 

并且假设这个插件在插件头部没有以下内容

Text Domain: some-plugin-txt-domain

'Inpsyde Translation Cache' 将无法在插件激活和停用时自动清除该插件的缓存。

然而,手动清除该插件的缓存只是以下操作

function invalidate_some_plugin_translation_cache() {
	if ( class_exists( 'Inpsyde\TranslationCache\MoCache' ) ) {
		Inpsyde\TranslationCache\MoCache::flush_cache( 'some-plugin-txt-domain' );
    }
}
 
register_activation_hook(
    WP_PLUGIN_DIR . '/some-plugin-dir/some-plugin-filename.php',
    'invalidate_some_plugin_translation_cache'
);

register_deactivation_hook(
    WP_PLUGIN_DIR . '/some-plugin-dir/some-plugin-filename.php',
    'invalidate_some_plugin_translation_cache'
);

当然,如果可能编辑插件以包含 Text Domain 插件头部,这肯定更好,因为 'Inpsyde Translation Cache' 将能够自动清除插件翻译的缓存。

对于主题,工作流程非常相似,只需使用 'switch_theme' 钩子来拦截主题更改。

按版本无效化

还有另一种无效化缓存翻译的方法。

'Inpsyde Translation Cache' 为文本域和 .mo 文件路径的组合构建一个唯一的密钥。

这个唯一密钥是通过以下 'hash' 构建的

  • 文本域
  • .mo 文件路径
  • 'Inpsyde Translation Cache' 自身版本
  • 可以通过 mocache_cache_version 过滤器设置的任意 '版本' 字符串

这意味着使用 mocache_cache_version 过滤器,可以无效化给定文本域的所有存储密钥。

例如,假设与上面相同的插件,我们可以这样做

add_filter( 'mocache_cache_version', function( $version, $domain ) {
    $plugin_path = WP_PLUGIN_DIR . '/some-plugin-dir/some-plugin-filename.php';
    $headers     = get_plugin_data( $plugin_file_path, FALSE, FALSE );
    
    return $headers['Version'];
}, 10, 2 );

因此,我们使用 '版本' 插件头部来在版本更改时清除缓存。

与上述 '手动' 方法相比,这种方法的好处是无需显式调用 'Inpsyde Translation Cache' 对象,因此不需要检查类是否存在。实际上,如果 'Inpsyde Translation Cache' 没有安装或未激活,则代码将没有任何效果。

但它也有两个缺点

  • 旧版本的缓存条目 不会 被删除,它们只是因为存在新版本而被忽略。然而,当密钥的自然到期时间到达时,它们将被丢弃。考虑到默认的自然到期时间是 12 小时,这个问题应该不会那么严重。
  • 上述代码要求插件在头部定义版本,并且为了有效,它依赖于每次翻译文件更改时都更新版本。即使这些是常见做法,主题/插件作者可能只是忽略或忘记它们。

因此,再次建议,在可能的情况下使用 Text Domain 头部,也许可以向第三方插件和主题的维护者建议,如果不存在,则添加它。

可用的钩子

'Inpsyde Translation Cache' 提供了一些用于定制的钩子。大多数钩子仅从 MU 插件中正常工作,特别是如果 'Inpsyde Translation Cache' 作为 MU 插件运行。

可用的 action 钩子

  • inpsyde_translation_cache,在插件类加载后触发。用于包装对 Inpsyde\TranslationCache\MoCache::flush_cache() 的调用。

可用的 filter 钩子

  • mocache_cache_enabled 可以用来通过挂钩回调以 false 程序化地禁用插件。

  • mocache_cache_version 可以用来为给定的文本域(作为参数传递)无效化缓存。如果返回的版本有变化,则缓存将被无效化。参见上面的 '按版本无效化'

  • mocache_cache_expire 可以用来自定义缓存值的持续时间(以秒为单位)。返回的值小于或等于零将阻止执行任何缓存。

安装

'Inpsyde Translation Cache' 通过 Composer 提供包名为 inpsyde/mo-cache,但它不要求安装或使用 Composer。

“传统”安装方法(下载 -> 放入插件文件夹 -> 激活)同样有效。

要求

  • PHP 5.5 或更高版本。
  • WordPress,目前测试版本为 5.1

许可证

本存储库是免费软件,根据 GNU 通用公共许可证第 2 版或(根据您的选择)任何后续版本发布。请参阅 LICENSE 了解完整的许可证。

“Inpsyde Translation Cache” 集成了以下版权和许可声明所涵盖的工作

  ___                           _      
 |_ _|_ __  _ __  ___ _   _  __| | ___ 
  | || '_ \| '_ \/ __| | | |/ _` |/ _ \
  | || | | | |_) \__ \ |_| | (_| |  __/
 |___|_| |_| .__/|___/\__, |\__,_|\___|
           |_|        |___/            

自 2006 年以来,Inpsyde 团队一直在开发网络。