0

XMLフィードからデータ(自動車販売店の在庫)を取得してサイトに表示するLAMP上に構築されたサイトで作業しています。インデックスページには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

すべてのリクエストでハードディスクにヒットすることは、パフォーマンスの面でコストがかかるため、論理的には、そこにあるキャッシュ システムは実際には役に立ちません。代わりに、APCmemcached、またはRedisを調べてください。データをメモリに直接保存できるため、読み書きがはるかに高速です。

于 2012-08-06T21:06:28.970 に答える