Минимизация GET-запросов с использованием PHP - PullRequest
2 голосов
/ 18 апреля 2011

Я написал функцию, которая использует YQL для получения информации о запасах следующим образом:

function quote_func() {
$BASE_URL = "https://query.yahooapis.com/v1/public/yql";

// Form YQL query and build URI to YQL Web service
$yql_query = "select * from yahoo.finance.quotes where symbol in ('AAPL')";
$yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json&env=http://datatables.org/alltables.env&callback=";

// Make call with cURL
$session = curl_init($yql_query_url);
curl_setopt($session, CURLOPT_RETURNTRANSFER,true);
$json = curl_exec($session);
// Convert JSON to PHP object 
$phpObj =  json_decode($json);

// Confirm that results were returned before parsing
if(!is_null($phpObj->query->results)){
    $quote = $phpObj->query->results->quote;
            return $quote;
}
}

Затем я отображаю информацию, которую хочу использовать:

<?php echo quote_func()->DATA-I-WANT; ?>  

Я знаю, что это плохо, потому что каждый раз, когда я использую функцию, я выполняю запрос GET.

Может ли кто-нибудь указать мне хотя бы правильное направление?

1 Ответ

3 голосов
/ 18 апреля 2011

Я бы посоветовал вам кешировать результат.Вы можете хранить данные в базе данных, но лучшим местом, вероятно, является надлежащий кеш, такой как memcached, APC или даже просто файловая система.

Вот мертвая простая реализация файловой системы (не проверенная и только для иллюстрации).

$cacheFile = '/tmp/myCache.txt';
$expirePeriod = 1800; // in seconds
if (file_exists($cacheFile) && time() - filemtime() < $expirePeriod) {
   $quoteData = file_get_contents($cacheFile);
} else {
   $quoteData = quote_func();
   file_put_contents($cacheFile, $quoteData);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...