- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем привет.
Как сделать кэширование в файлы я прекрасно знаю, но хотел бы обсудить варианты кэширования ...
Допустим есть некий script.php?param=value, при обращении к каждой такой странице выполняются 5 "тяжелых sql запросов" ... в результате которых имеем 5 массивов с данными
варинат кэширования №1:
генерить для каждой страницы (в зависимости от value) 5 файлов с сериализованными ( функция serialize ) массивами и при следующем обращении к странице подгружать эти файлы, делать unserialize и т.д
Плюсы: дизайн никак не завязан на кэшировании т.е если завтра я захочу добавить какой-то элемент, то не придется очищать кэш для нескольких тысяч страниц
Минусы: слишком много файлов получается + unserialize довольно тормозная функция
вариант кэширования №2:
закэшировать целиком всю страницу целиком в один файл ... т.е заюзать ob_start(), ob_get_contents() и полностью сохранить страницу вместе с html элементами.
плюсы: для каждой страницы всего один файл кэша
минусы: если захочу внести в дизайн какие-то изменения, то придется полностью очищать кэш
Какой варинат на Ваш взгляд является оптимальным????
При первом варианте теряем на скорости доступа к файловой системе ( если не организовать систему подкаталогов, что бы в каждой папке было не более например 1000 файлов ) + unserialize скажем так не очень быстрая функция ( а ее для каждой страницы прийдется 5 раз применять ).
При втором варианте файл всего один, но сильно теряем у удобстве и получаем кэш-зависимый дизайн.
Хотел бы услышать Ваше мнение по этому поводу .. хотелось бы услышать мнение людей имеющих сайты с действительно большой нагрузкой и самостоятельно реализовавших систему кэширования.
Спасибо.
2. Сами подумайте, как часто вы будете менять дизайн.
ну я не спец по высоконагруженным системам но свое мнение выскажу=))
Первый вариант это шило на мыло, т.е. вместо гимора с обращениями к базе вы имеете гимор работы с файлами, сериализ и обратно и т.п. и т.д.
Я бы просто кешировал страницу полностью. И если уж добавляется элемент в дизайн, то чистил бы весь кеш.
Или как вариант еще на стадии проектирования продумать модульную сетку, вычленить из нее блоки в которых присутствуют объемные операции с базой, и далее кешировать только эти блоки.
Т.е. тут если правки по дизу идут вне этих блоков, это кеша не коснется. Но естесно это не избавит от необходимости очистки кеша при внесении изменений в кешируемый блок.
Я бы просто кешировал страницу полностью. И если уж добавляется элемент в дизайн, то чистил бы весь кеш.
Я бы поступил аналогично. Только сайт должен уметь генерить кеш странички на лету, если в кеше она отсутствует. И кеш бы периодически очищал по крону - отсчитывая от времени последнего просмотра страницы - чтобы не забивать таблицу ненужным. Кстати, если покопаться в исходниках воблы - то там используется именно эта технология.
Еще замечу, если есть доступ к настройкам MySQL, то он тоже самостоятельно способен кешировать запросы. :)
я пробовал и так и так,
остановился на неольких проектах на варианте - кеш полностью страницы которые можно закешить, причем отдает его нгинкс, если кеш "не найден" то проброс на пеху его генерящую. (хотя есть варианты работы на базе кеша, который сами нгинксом и генерится, а не скриптами) - плюсы нгинкс со статикой работает лучше чем апач с динамикой и пехой.
если есть динамика - то вариант кешить целиком страницу не прокатит. и тогда кешить именно кусками прийдется. можно совместить 1 и 2
хотя, все это очень индивидуально, зависит и от вижка, и от рук, и от железа.
...сейчас у меня баннерокрутилка+посещаемый сайт около 3х млн обрщений в сутки динамики ,которую нельзя закешить , - не напрягаясь без всяких кешей отстреливаетя нгинкс +пых без апача
Я бы поступил аналогично. Только сайт должен уметь генерить кеш странички на лету, если в кеше она отсутствует. И кеш бы периодически очищал по крону - отсчитывая от времени последнего просмотра страницы - чтобы не забивать таблицу ненужным. Кстати, если покопаться в исходниках воблы - то там используется именно эта технология.
Еще замечу, если есть доступ к настройкам MySQL, то он тоже самостоятельно способен кешировать запросы. :)
чистить кэш по крону имхо не самое удачное решение! гораздо проще при каждой обращении к странице смотреть на возраст файла с кэшем ... если просрочен, то обновлять
_savit добавил 16.12.2008 в 14:57
2. Сами подумайте, как часто вы будете менять дизайн.
да в том то и дело что обычно я часто что-то меняю ж)))
у меня есть один сайт где страницы полностью кэшируются и их реально очень много ... захотел вчера поставить на сайт Google Analitycs, но как подумал что придется весь кэш убить чтобы вставить в код кусок яваскрипта сразу расхотелось ;)
а может кешировать резалт от запроса? =)
а может кешировать резалт от запроса? =)
ну это и есть вариант №1 про который я писал ... кэшируется только результат запроса
что-то типа такого
запросы прекрасно кэшируется самим MySQL с некоторыми исключениями и в большинстве случаев такой кэш эффективней издевательства над файловой системой.
Кєширование страниц / блоков дает дополнительную экономию, нет повторной генерации самого html, здесь основной вопрос - сколько будет создаваться файлов. Смотрите в сторону memcache.
чистить кэш по крону имхо не самое удачное решение! гораздо проще при каждой обращении к странице смотреть на возраст файла с кэшем ... если просрочен, то обновлять
я сделал похоже - высоконагруженные куски кода внутри страниц кешируются в отдельные файлы.
т.е. например на главной блок новостей кешируется в один файл, а блок анонсов в другой.
при этом можно настроить для каждого блока свое время обновления (например кеш блока новостей переписывается раз в 10 минут, а блок анонсов - раз в час).
при этом можно разбить кеш по другому: например закешировать header и footer в отдельные файлы (всего 2 файла будет), а контент страниц в отельные свои файлы и собирать их при генерации страницы. И, например, если в шапке что то изменили - просто удаляем cache/header.html, либо он сам перепишется через какое то время (если изменения не критичны).
Я выбрал бы второй вариант. Не думаю что дизайн придется так часто менять.