Какие методы кэширования, кроме в файл или базу данных, доступны?

12
задан Patrick McElhaney 2 August 2010 в 14:26
поделиться

4 ответа

Возможно, Вы хотите к явному более точно, что Вы хотите кэшировать. У Вас есть все это возможности кэшироваться:

  • Доступ к Базе данных, где Вы кэшируете данные сначала правильно настройка Вашего RDBMS, затем с помощью слоя для делегирования решения обнаружить несколько запросов для тех же данных (с AdoDB, например.)
  • Извлечение вычислений от циклов в коде, таким образом, Вы не вычисляете то же значение многократно. Здесь Ваш третий путь: хранение результатов на сессии для пользователя.
  • Предварительная компиляция PHP кодирует с расширением как Кэш APC. Таким образом, Вы не должны компилировать тот же код PHP для каждого запроса.
  • Страница отправила пользователю, удостоверяющемуся, что Вы устанавливаете правильные Метатеги (сделайте хорошую вещь для мира и не используйте ETL, по крайней мере, absolutly необходимый); или возможно делая динамические страницы абсолютно статичными (наличие пакетной обработки, которая генерирует .html страницы); или при помощи кэша прокси-сервера как Сквид.
  • Упреждающая выборка и этим, я отсылаю все те возможности, необходимо улучшить пользовательский опыт только путем выполнения вещей, в то время как пользователь не смотрят путь. Например, предварительно загружая теги img в файле HTML, настраивая RDBMS для prefectching, предварительно вычисляя результаты, хранящие сложные вычисления в базе данных, и т.д.

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

Проверьте также, как хорошо Вы делающий Ваши SQL-запросы и как хорошо Вы индексирующий Ваши таблицы. Затем проверьте свой код снова для поиска возможностей применять правило "чтение много раз, но запись только однажды"

Используйте простой инструмент как YSlow для вывода подсказок других простых вещей улучшиться. Проверьте свой код, снова ища возможности поместить логику в браузер (через JavaScript)

2
ответ дан 2 December 2019 в 23:51
поделиться

Seconding memcached, делает простой материал хорошо и может пойти дистрибутивный и весь этот джаз при необходимости в нем также

0
ответ дан 2 December 2019 в 23:51
поделиться

Можно также кэшироваться в памяти, которая намного более эффективна. Попробуйте memcached.

1
ответ дан 2 December 2019 в 23:51
поделиться

При использовании Apache можно использовать mod_rewrite для статичного кэширования веб-страниц. Позволяет говорят, что Вы используете PHP, и у Вас есть запрос на "/somepage.php". В Вашем .htaccess файле Вы помещаете следующее:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

Если Ваш кэш поднимается пустой, запрос обработан Вашим сценарием PHP, как обычно, поэтому теперь это - просто вопрос того, чтобы заставлять Ваш сценарий PHP сохранить получающийся HTML в кэше. Самый простой способ сделать это использует другое правило htaccess предварительно ожидать конец, добавляют несколько php файлов ко всем Вашим запросам php (этот, мог бы или не могла бы быть хорошая идея, в зависимости от Вашего приложения):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

Затем Вы сделали бы что-то вроде этого:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

С некоторыми дополнительными регулярными выражениями в .htaccess файле мы могли, вероятно, начать кэшировать запросы строки запроса также, но я оставлю это как осуществление для читателя :)

0
ответ дан 2 December 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: