2012-08-06 42 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,因为它们允许您将数据直接存储在内存中,读取和写入速度更快。