Простая техника кэширования Php для небольших и средних сайтов - PullRequest
5 голосов
/ 05 октября 2009

Я искал кеширование HTML / текстового контента для сайта малого и среднего размера, используя php.Я в основном сохраню динамическое навигационное меню для сайта, сгенерированный отчет HTML из БД и т. Д. В первую очередь я ищу кеширование на основе сеансов (это плохая идея?).Он также может быть основан на файлах.

Любое существующее решение высоко ценится.Например, Zend Framework хорошо известен своими слабосвязанными компонентами.Таким образом, Zend_Cache может быть кандидатом, но не может найти адаптер кэширования на основе сеанса.Более того, это не совсем самостоятельный компонент.Кто-нибудь может сказать, какие классы мне нужно использовать, чтобы использовать Zend_Cache?

Другой вариант - PEAR - Cache_Lite, как вы к этому относитесь?

Есть ли какая-то другая структура, откуда яможет легко отделить компонент кэширования и использовать его с меньшим обучением?

Спасибо.

Ответы [ 5 ]

2 голосов
/ 04 января 2010

Memcached приходит на ум как действительно легкое и эффективное решение.

Но вы также можете кэшировать контент в простых файлах. Файловая система обычно быстрая и обрабатывает блокировки чтения / записи без проблем. И нет никакой необходимости в какой-либо необычной библиотеке, чтобы справиться с этим ... функции filemtime , file_put_contents и file_get_contents - все, что вам нужно.

  1. Проверьте, не был ли кэш записан более N секунд назад с помощью filemtime ()
  2. Если он слишком старый, сгенерируйте содержимое и запишите его с помощью file_put_contents ()
  3. Если нет, просто загрузите его с помощью file_get_contents ()

Редактировать: Я добавлю ссылку на пост, который я сделал несколько месяцев назад: Лучшее решение для кеширования . Это не совсем по теме, но это может помочь вам в ваших исследованиях:)

1 голос
/ 05 октября 2009

Кэширование на основе сеансов, вероятно, не очень хорошая идея. Это подходит только в ограниченных случаях, когда вам нужно кэшировать определенный результат для каждого пользователя (не для всех).

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

1 голос
/ 04 января 2010

JPCache - приличная облегченная библиотека кэширования.

0 голосов
/ 04 января 2010

Большинство библиотек php-кэширования реализованы с использованием функций управления буфером вывода . Таким же образом вы можете реализовать собственное очень простое кэширование.

<?php

function callback($buffer)
{
  // Code to store output in cache
}

if (/* Test cached copy is still valid */) {
    /* Output cached copy to browser */
    exit(0);
}

ob_start("callback");
?>

<html>...</html>

<?php
ob_end_flush();
?>

Вы можете опустить ob_end_flush(), если хотите, так как он будет запущен автоматически в конце вывода.

Интересно отметить, что эта структура может быть обернута вокруг меньших блоков, чем страница. Например, вы упоминаете кеширование только в меню навигации. Вам понадобится немного больше логики вокруг блока для кэширования, но принцип тот же.

0 голосов
/ 05 октября 2009

Вы можете посмотреть на кеширование в CakePHP . Я сомневаюсь, что вы сможете отделить его от работы с фреймами, но это должно помочь вам понять, как кэшировать динамический контент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...