假设您的代码存在于函数中calculateCityAverages()
返回(不是echo!)您的数据,可能以数组的形式。
要缓存数据,你可以做很多事情,自定义选项,甚至一篇帖子。。我会使用Transients API
Transients API,它提供了一种简单而标准化的方法,通过为缓存数据提供一个自定义名称和一个时间段,在该时间段之后缓存数据将过期并被删除,从而将缓存数据临时存储在数据库中。
将计算函数包装成这样
function getCityAverages($force = FALSE){
$result = get_transient(\'my_city_averages\');
// if there is no cached data or we want to refresh cache
if ($result === FALSE || $force === TRUE) {
// calculate it
$result = calculateCityAverages();
// store it for 12h
set_transient(\'my_city_averages\', $result, 12 * HOUR_IN_SECONDS);
}
return $result;
}
但仍然存在一个问题:对于第一个访问者,或者缓存为空的任何时候,都会有40秒的页面加载。只有在那之后的游客才会从这一过渡中获益。
要避免这种情况,可以加热缓存(cold and warm cache?), 因为这应该在特定的时间间隔和后台进行,所以使用WP-Cron 通过wp_schedule_event()
.
建议在激活插件时安排事件,因为这通常只应执行一次(当然,计划将运行多次)。
此代码直接来自codex。你只需要打电话getCityAverages(TRUE)
(以确保您重新计算它,而不仅仅是从缓存中获取它)。
register_activation_hook(__FILE__, \'my_activation\');
function my_activation() {
if (! wp_next_scheduled ( \'my_hourly_event\' )) {
wp_schedule_event(time(), \'hourly\', \'my_hourly_event\');
}
}
add_action(\'my_hourly_event\', \'do_this_hourly\');
function do_this_hourly() {
// we don\'t care about the result, just warm cache
getCityAverages(TRUE);
}
由于您现在在WP Cron中有需要很长时间的任务,我建议使用适当的
crontab/cronjob instead of how WordPress does it by default.
剩下的就是电话getCityAverages()
任何需要数据的地方。