2012-08-06 40 views
0

我正在建立在LAMP上的網站上,該網站從XML提要中提取數據(汽車經銷商庫存)並將其顯示在網站上。索引頁面上有一個旋轉器,可顯示4個隨機車輛,但頁面加載時間很長 - 約爲7-10秒。這是因爲該網站在顯示結果之前循環查看數據以找到具有圖像並符合其他標準的汽車。我的開發人員一起把這個腳本緩存結果5分鐘:PHP緩存腳本 - 保存緩存數據不會減少網站頁面加載

/* 
* Cache requests for 5 minutes 
* Wraps original method (now _sendRequest) 
*/ 
private function sendRequest($xml) { 
    error_log($xml); 
    $cache_filename = dirname(__FILE__) . '/cache/' . md5($xml); 
    if (file_exists($cache_filename) && (time() - filemtime($cache_filename)) < 300 && filesize($cache_filename) > 100) { 
     return file_get_contents($cache_filename); 
    } elseif (file_exists($cache_filename)) { 
     unlink($cache_filename); 
    } 
    $response = $this->_sendRequest($xml); 
    if (!is_dir(dirname($cache_filename))) { 
     @mkdir(dirname($cache_filename),0775,true); 
    } 
    @file_put_contents($cache_filename, $response); 
    return $response; 
} 

private function _sendRequest($xml) { 
    $options = array(
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_CONNECTTIMEOUT => 120, 
     CURLOPT_TIMEOUT   => 120, 
     CURLOPT_POST   => true, 
     CURLOPT_USERAGENT  => Config::$appName, 
     CURLOPT_USERPWD   => Config::$aweAPIKey, 
     CURLOPT_URL    => Config::$aweAPIURL, 
     CURLOPT_POSTFIELDS  => $xml 
    ); 
    $ch = curl_init(); 
    curl_setopt_array($ch, $options); 
    $content = curl_exec($ch); 
    //echo "ERROR: " . curl_error($ch); 
    curl_close($ch); 

    return $content; 
} 

腳本的目錄是在/lib/client.php,它是節省大量的含/ lib下的車輛數據的文本文件/緩存,但網站頁面加載不會減少。我應該對腳本進行一些更改,或者它如何保存緩存的數據?

+0

你的瓶頸可能不在請求中,而是在請求處理中。 _sendRequest是檢索xml還是處理xml? – hackattack 2012-08-06 21:08:21

+0

此外,它看起來像你的唯一緩存300秒......這不是很長 – hackattack 2012-08-06 21:10:57

+0

首先,如果我正確讀取該緩存,則該緩存僅適用於300秒(最終值300代表時間的秒數)。難道高速緩存的期望長度會持續嗎?您的請求在300多個窗口內是否更快?還有什麼樣的價值傳遞給$ xml的函數? 此外,這並沒有顯示任何關於通過XML數據過濾的邏輯。你的問題可能在那裏。 – 2012-08-06 21:11:46

回答

0

在每次請求時打開硬盤在性能方面都很昂貴,因此從邏輯上講,您的緩存系統並不會有幫助。相反,請查看APC,memcachedRedis,因爲它們允許您將數據直接存儲在內存中,讀取和寫入速度更快。