У меня есть страница с довольно большой загрузкой данных из моего 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.