Как правильно кешировать файлы в php - PullRequest
4 голосов
/ 15 января 2010

У меня есть страница с постом и несколькими комментариями, с помощью PHP ob_start() Я могу успешно ее кешировать.

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

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

Что было бы лучшим решением для решения этой проблемы.

Ответы [ 3 ]

3 голосов
/ 15 января 2010

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

Вы можете хранить целые блоки контента, массивы, объекты, вы называете это:

// you must supply:
// 1. a key you will later use to retrieve your content
// 2. the data you wish to cache
// 3. how long the cache should remain valid 
apc_store($key, $data, $ttl);

Что касается поиска, вы просто делаете вызов, как:

$data = apc_fetch($key);
3 голосов
/ 15 января 2010

Я надеюсь, что это не так, но я не думаю, что в настоящее время есть какой-то простой способ обойти это, кроме ограничения продолжительности кэша.

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

Если одна из основных целей кэширования состоит в том, чтобы уменьшить накладные расходы на обработку (так какв отличие от потребления пропускной способности) вы, конечно, могли бы просто сгладить нединамические части страницы (каждый пост в виде статического текстового файла или аналогичного) - следовательно, уменьшить необходимость повторной генерации HTML, если вы используете Markdown или BBCode,и т.д.) и включите их по мере необходимости / обновите их, если они отредактированы.

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

Некоторые мои мысли:

Вы можете сохранять страницы сообщений в кэше в течение определенного периода времени, например, одного часа или 15 минут. Это время зависит от количества посетителей на странице, частоты смены информации и ваших личных предпочтений. Потому что на самом деле не имеет значения, является ли количество постов пользователя немного устаревшим. По истечении этого периода удалите кэшированную версию (также экономит ресурсы), и если страница будет посещена снова, она будет повторно кэширована с обновленными данными.

Умным (пере) использованием ob_start() вы можете буферизовать несколько частей страницы, таких как часть публикации и часть комментариев. Храните эти части отдельно, и вам нужно всего лишь восстановить одну часть вместо полной страницы. В большинстве случаев почтовая часть меняется не очень часто.

Отслеживайте страницы, на которых определенный пользователь оставлял комментарии (или саму страницу, если он ее создал). После изменения данных пользователя (добавление нового сообщения / комментария) сделайте эти страницы устаревшими (то есть удалите кэшированную версию). Если за небольшой промежуток времени у вас появилось много изменений, вы можете использовать какой-либо фоновый процесс для повторного кэширования страниц и поддержания отзывчивости вашего веб-сервера.

Вставка токенов (уникальных фрагментов текста, таких как% user: 123, postcount%) часто меняющихся деталей - еще одна возможность. Затем сохраните эту версию в своем кеше и по запросу страницы вы можете заменить токены на их данные. Это также может быть объединено с другими методами кэширования, если количество просмотров страниц за период времени очень велико (или, по крайней мере, намного выше, чем частота изменений деталей).

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