根據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請求。
談效率!
當然,我也建議有一個類的實現,所以你可以使用實例變量而不是全局數據來存儲數據,但這只是nitpicky。
希望有幫助!
你看過這篇文章 - http://stackoverflow.com/questions/17379312/cache-json-response? – verisimilitude
感謝真實,我曾經見過類似的東西,但這仍然是一個有用的帖子。由於我的API響應對於所有用戶都是相同的(即沒有變量被傳遞),我想知道服務器端緩存是否會是更好的選擇?你怎麼看? –
如果所有用戶的響應相似,那麼服務器端緩存絕對是更好的選擇。 – verisimilitude