更快地将20个远程文件写入缓存php

时间:2014-07-31 22:14:48

标签: php caching json-api

我目前有这个代码。它从api获取每小时的json数据文件和整天的文件。然后它会缓存结果以便更快地获取。它目前需要大约10秒来获取所有文件并使用它们(没有缓存),使用缓存执行需要~1,但是当缓存过时时,使用下面的方法(使用缓存)需要大约80秒。显然还有其他代码在运行,但这是缓慢的。 $this->hours有24个元素。

是否有更快的方式来获取文件&缓存它们?

/**
 * Get the weather data from forecast.io
 * @return array The overall weather data
 */
public function getData($kernelDir)
{
    $apiSite = 'https://api.forecast.io/forecast/';
    $url = $apiSite . $this->apiKey . '/' . $this->latitude . ',' . $this->longitude;

    if (!file_exists($kernelDir . '/cache/api/' . $this->latitude . '.' . $this->longitude))
    {
        $weatherFile = @file_get_contents($url);
        $fp = fopen($kernelDir . '/cache/api/' . $this->latitude . '.' . $this->longitude, 'w+');
        fwrite($fp, $weatherFile);
        fclose($fp);
    }
    else {
        $weatherFile = @file_get_contents($kernelDir . '/cache/api/' . $this->latitude . '.' . $this->longitude);
    }

    $this->weatherData['day'] = @json_decode($weatherFile, true);

    $this->getHours();

    foreach ($this->hours as $normal => $unixTimestamp)
    {
        $url = $apiSite . $this->apiKey . '/' . $this->latitude . ',' . $this->longitude . ',' . $unixTimestamp;

        if (!file_exists($kernelDir . '/cache/api/' . $this->latitude . '.' . $this->longitude . '.' . $unixTimestamp))
        {
            $weatherFile = @file_get_contents($url);
            $fp = fopen($kernelDir . '/cache/api/' . $this->latitude . '.' . $this->longitude . '.' . $unixTimestamp, 'w+');
            fwrite($fp, $weatherFile);
            fclose($fp);
        }
        else {
            $weatherFile = @file_get_contents($kernelDir . '/cache/api/' . $this->latitude . ',' . $this->longitude . ',' . $unixTimestamp);
        }

        $this->weatherData['time'][$normal] = @json_decode($weatherFile, true);
    }

    return $this->weatherData;
}

0 个答案:

没有答案