2015-02-15 2 views
2

Я извлечение всех файлов в директории и кэшировать значения, так что я не должен получить его снова и сноваКэширование переменной с помощью PHP?

$memefiles = glob("usermemes/*.jpeg"); 
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page); 

Есть ли способ, чтобы кэшировать этот результат, так что я не должен выполнять эти функции снова и снова.

+0

можно дублировать http://stackoverflow.com/questions/4432727/caching-variables-in-php –

+0

Что об использовании куки –

ответ

1

Существует много способов оптимизации или кэша, лучший способ зависит от того, что вы пытаетесь кэш, количество и желаемая частота обновления. Примерами являются

  • магазин результат расчета в сессии, базу данных или файл - то искать его
  • делать расчеты авансовых, LookUp их затем необходимо
  • магазин ваши страницы (PHP вывод в файлы) и доставить хранится версии для пользователей
  • использовать кеш/HTTP-ускоритель, например Varnish.

В этом случае, я думаю, что предварительный расчет удовлетворит ваши потребности. Проще говоря ваш код в один сценарий, calculate.php, который сохраняет вычисленный $total_pages значение файла:

<? 
$memefiles = glob("usermemes/*.jpeg"); 
$total_pages = ceil(sizeof($memefiles)/$num_rec_per_page); 
file_put_contents('totalpages.dat', $total_pages); 
?> 

Теперь настройки хрон работу, работает calcaulate.php каждые 1 минуту, 5 минут, каждый час или, что ваш потребности есть. Если вы работаете на сервере Windows, вместо этого вы должны использовать эквивалент планировщика заданий. Настройка cronjobs очень проста, но она различается между системами и инструментами GUI/командной строки, есть разница, если у вас есть сервер на месте или используется профессиональный веб-хост. Таким образом, поиск stackoverflow для заданий cron соответствует вашей конкретной ситуации.

Если у вас есть работа хрон до запуска, сохранения значения $total_pages в файл, то вы запрашиваете свою ценность на веб-странице с помощью

$total_pages = file_get_contents('totalpages.dat'); 

Это будет по гарантии повысить производительность всех страниц, нуждающихся в доставке значения $total_pages. По сравнению с accepted answer, это решение имеет ряд существенных преимуществ:

  • задача запущенной только один раз, каждый раз, независимо от того, если у вас есть 1, 10000 или 1.000.000 пользователей/pageloads.
  • пользователи могут получать почти свежие или почти живые данные. Как свежие определяются частотой cronjob.
+0

Как я буду хранить массив '$ memefiles' в этом случае? –

+0

@SheelRanjan, так как '$ memefiles' просто простой массив, вы можете сохранить его в файл как строку с' $ content_to_file = implode (',', $ memefiles); 'и затем вы читаете содержимое из файла, преобразуйте его обратно в массив с помощью '$ memefiles = explode (',', $ content_from_file);' – davidkonrad

+0

После взлома и взрыва я все равно буду иметь повышение производительности? –

1

Использование печенья. Чтобы хранить массив в файлах cookie, вам нужно будет закодировать его в json, а затем декодировать его с помощью json_decode(). Используйте приведенный ниже код

<?php 

    if(!isset($_COOKIE['calculation'])) { 
    $memefiles = glob("usermemes/*.jpeg"); 
    $total_pages = ceil(sizeof($memefiles)/$num_rec_per_page); 
    setcookie('calculation', json_encode($memefiles), time() + (8640000000 * 30), "/"); // Set the cookie for unlimited time 
    } 
    else{ 
    $memefiles = json_decode($_COOKIE['calculation'],true); 
    } 
    ?> 

Надеется, что это помогает вам

+0

у меня есть еще одно сомнение. Увеличит ли производительность, если в каталоге много файлов? –

+0

@Sheel Ranjan Он бы вызывающе увеличивал производительность, если в каталоге много файлов –

+0

Я думаю, что вы не сохранили массив в Cache, должен ли я сделать это так: setcookie ('memes', $ memefiles, time() + (8640000000 * 30), «/»); ' –