0

我正在开发一个基于 LAMP 的网站,该网站从 XML 提要中提取数据(汽车经销商库存)并将其显示在网站上。索引页面上有一个旋转器,显示 4 辆随机汽车,但是页面加载有很长的延迟 - 大约 7-10 秒。这是因为该站点在显示结果之前会循环浏览数据以查找具有图像并满足其他标准的汽车。我的开发人员将这个脚本放在一起,将结果缓存 5 分钟:

/* 
 * 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/cache 中保存了大量包含车辆数据的文本文件,但是站点页面负载并没有减少。我应该对脚本或它如何保存缓存数据进行一些更改吗?

4

1 回答 1

0

就性能而言,每次请求都击中硬盘是昂贵的,因此从逻辑上讲,您的缓存系统并没有真正的帮助。相反,请查看APCmemcachedRedis,因为它们允许您将数据直接存储在内存中,这样读写速度要快得多。

于 2012-08-06T21:06:28.970 回答