在WordPress主题中,我正在显示来自外部JSON API的信息。如何缓存此数据以改善页面加载时间。
我有一个jQuery函数
var url = 'http://my.api.com/'
$.getJSON(url)
.done( function(data) {
#display this data
})
.fail( function( jqXHR, textStatus, error) {
#handle errors
});
jQuery是否提供了缓存这些请求的方法?或者我应该以某种方式在WordPress中处理这个问题(也许在服务器上写一个JSON文件的响应)?
答案 0 :(得分:4)
根据API和进行调用的上下文,您可以使用服务器完成这些API调用,而不是要求客户端执行此操作。执行前者意味着您可以通过数据库使用缓存,但这意味着服务器上的压力会更大,因为现在正在完成所有请求。
如果不是特定于用户的信息,这可能真的值得。也就是说,我非常支持服务器端缓存涉及外部Web服务的任何事情。
你可能想要利用一些WordPress的内置功能,特别是包括:
<强> WP_Http 强> 这是WordPress'漂亮的内置HTTP库,您可以使用它与API通信。
Transients API 再次 - 超级漂亮。允许您在本地数据库中存储和检索自过期数据。
快速实施(未经测试,如果有问题请告诉我)如下:
define( 'HOURS', 60 * 60 );
function get_api_info( ) {
global $apiInfo; // Check if it's in the runtime cache (saves database calls)
if( empty($apiInfo) ) $apiInfo = get_transient('api_info'); // Check database (saves expensive HTTP requests)
if( !empty($apiInfo) ) return $apiInfo;
$response = wp_remote_get('http://my.api.com');
$data = wp_remote_retrieve_body($response);
if( empty($data) ) return false;
$apiInfo = json_decode($data); // Load data into runtime cache
set_transient( 'api_info', $apiInfo, 12 * HOURS ); // Store in database for up to 12 hours
return $apiInfo;
}
然后,您只需要在代码中的任何位置调用get_api_info()来检索所需的数据。如果在同一个请求/脚本中多次调用该函数,它仍然只会向数据库大喊一次。如果您在12小时内在多个请求中调用该函数,它将只发送一次API请求。
谈论效率!
当然我也建议为此实现一个类实现,这样你就可以使用实例变量而不是全局变量来存储数据,但这只会让人感到厌烦。
希望有所帮助!