我有一个多站点wordpress,有多个本地化站点(es\\es,de\\u de,it\\u it)。我想通过缓存wordpress翻译文件来提高页面速度。
我的代码有效(灵感来自Tristan Darricau)! 我的页面速度提高了0.50秒。
现在,我的问题是:我的代码是正确的,或者可以破坏某些东西(核心、主题、插件),我已经测试过,它似乎可以工作,但我是wp的新手!
/**
* Cache translation
* @param boolean $override
* @param string $domain
* @param string $mofile
* @return boolean
*/
function my_override_load_textdomain($override, $domain, $mofile) {
global $l10n;
// check if $mofile exisiste and is readable
if ( !(is_file($mofile) && is_readable($mofile)) ){
return false;
}
// creates a unique key for cache
$key = md5($mofile);
// I try to retrive data from cache
$data = wp_cache_get($key, $domain);
// Retrieve the last modified date of the translation files
$mtime = filemtime($mofile);
$mo = new \\MO();
// if cache not return data or data it\'s old
if ( !$data || !isset($data[\'mtime\']) || ($mtime > $data[\'mtime\']) ) {
// retrive data from MO file
if ( $mo->import_from_file( $mofile ) ){
$data = array(
\'mtime\' => $mtime,
\'entries\' => $mo->entries,
\'headers\' => $mo->headers
);
// save data in cache
wp_cache_set($key, $data, $domain, 0);
} else {
return false;
}
} else {
$mo->entries = $data[\'entries\'];
$mo->headers = $data[\'headers\'];
}
if ( isset( $l10n[$domain] ) ) {
$mo->merge_with( $l10n[$domain] );
}
$l10n[$domain] = &$mo;
return true;
}
add_filter(\'override_load_textdomain\', \'my_override_load_textdomain\',1,3);
旁注:我知道这是一个
code review stack\'s platform, 但所有wordpress的人都在这里,这是wordpress的人要问的问题。
我为我的英语不好道歉
最合适的回答,由SO网友:Celso Bessa 整理而成
看起来你的代码还可以,不会破坏任何东西,但要让它在不同的页面上正常工作,也许你应该使用Transient API 函数而不是Object Cache 副本。
为什么?
默认情况下,对象缓存不是持久的(即不跨不同页面工作)。只有安装了持久缓存插件和持久缓存后端(例如redis、memcached),它才会持久。
瞬态API工作得更“聪明”:如果没有持久对象缓存集,它会保持数据库中缓存的内容“持久”使用,但如果有持久缓存后端和插件,它会使用对象缓存API。
如果需要保证数据将被缓存,请使用Transients API而不是这些函数。如果配置了持久缓存,则瞬态功能将使用本文档中描述的wp\\U缓存功能。但是,如果尚未启用持久缓存,则数据将被缓存到选项表中。
(来源:https://codex.wordpress.org/Class_Reference/WP_Object_Cache )
请注意,数据库性能可能会受到影响,因此,请仔细测试和测量。