Intereting Posts
Автозаполнение JQuery из базы данных PHP: Получить последнюю цифру года (пример: 2015 == 5) Интерпретация возвращаемого значения функции непосредственно в виде массива php асинхронный вызов и получение ответа от фонового задания Можно ли запустить функцию в переменной шаблона Silverstripe для форматирования вывода? Вызов функции php с помощью события onclick Получить все переменные $ _POST, начиная с определенного текста Функция MySQL STR_TO_DATE не работает во времени Eclipse PDT против NetBeans для разработки PHP Нечетное поведение strpos Как выполнить правильную сдвиг без изменений в PHP? Как получить значение float при делении двух целых чисел? (PHP) Если инструкция из внешнего файла конфигурации не работает Я получаю «Ваши требования не могут быть разрешены к устанавливаемому набору пакетов». Когда я запускаю обновление для композитора PDO – Динамический bindParam – значение 0 странного результата

Кэш или сохранение в сеансе?

У меня есть страница с довольно большой загрузкой данных из моего db. Я бы хотел ускорить время загрузки. Я уже кеширую запрос, но время загрузки больше, чем хотелось бы.

Можно ли отображать таблицу с данными и сохранять ее в сеансе для загрузки на каждом обновлении новой страницы? Я даже думал о том, чтобы поместить его во внешний текстовый файл, используя ob_start ();

Каков наилучший способ справиться с этим?

Хранение его в сеансах, вероятно, не самая лучшая идея, когда вы добавляете данные на сеанс (по умолчанию) данные записываются в файл в ОС, обычно в / tmp /, что означает, что вы собираетесь ударить по диску довольно много и хранит столько же данных.

Если данные не являются конкретными пользователями, вы можете сохранить их на диске или в памяти – (см. Php.net/apc)

Если данные специфичны для пользователя, я рекомендую хранить их в распределенном кеше, например Memcached (memcached.org). PHP имеет библиотеку, которую вы можете включить (php.net/memcached)

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

Логика в основном одинакова для любого выбранного вами метода:

Memcached, пример пользовательских данных:

<?php $memcached = new Memcached(); $data = $memcached->get('shopping-cart_' . $user_id); if (!$data) { $sql = $db->query(".."); $data = array(); while($row = $query->fetch_assoc()) { $data[] = $row; } $memcached->set('shopping-cart_' . $user_id, $data); } ?> <table> <?php foreach ($data as $item) { echo '<tr><td>' . $item['name'] .' </td></tr>'; } ?> </table> 

Глобальные данные (не специфичные для пользователя)

 <?php $cache_file = '/cached/pricing-structure.something'; if (file_exists($cache_file)) { echo $cache_file; } else { // heavy query here $h = fopen('/cached/pricing-structure.something', 'w+'); fwrite($h, $data_from_query); fclose($h); } 

Если вы выполняете кеширование на одном веб-сервере (в отличие от нескольких распределенных серверов), PHP APC – это очень простое в использовании решение. Это кеш в памяти, аналогичный memcache, но выполняется локально. Я бы не хотел хранить сколько-нибудь значительное количество данных в сеансе.

APC является расширением PECL и может быть установлено с помощью команды

 pecl install apc 

Возможно, вам потребуется включить его в php.ini.