And*_*vey 2 ajax wordpress jquery json
在 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
});
Run Code Online (Sandbox Code Playgroud)
jQuery 是否提供缓存这些请求的方法?或者我应该以某种方式在 WordPress 中处理这个问题(也许将响应写入服务器上的 JSON 文件)?
根据 API 和进行调用的上下文,您可以使用服务器来完成这些 API 调用,而不需要客户端来完成。执行前者意味着您可以通过数据库利用缓存,但这意味着服务器会承受更多压力,因为它现在完成所有请求。
如果不是特定于用户的信息,这可能才真正值得。也就是说,我非常支持在服务器端缓存任何涉及外部 Web 服务的内容。
您可能希望利用 WordPress 的一些内置功能,特别是包括:
WP_Http 这是 WordPress 漂亮的内置 HTTP 库,您可以使用它与 API 对话。
再次瞬态 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;
}
Run Code Online (Sandbox Code Playgroud)
然后,您只需在代码中的任何位置调用 get_api_info() 即可检索所需的数据。如果您在同一个请求/脚本中多次调用该函数,它仍然只会向数据库大喊一次。如果您在 12 小时内在多个请求中调用该函数,它只会发送一次 API 请求。
谈效率!
当然,我也建议为此使用一个类实现,这样您就可以使用实例变量而不是全局变量来存储数据,但这只会变得挑剔。
希望有帮助!
归档时间: |
|
查看次数: |
2576 次 |
最近记录: |