Кэширование в php, пример
Хочу немного рассказать начинающим программистам и вебмастерам о нужности, важности и несомненной полезности такого механизма как кэширование страниц в PHP. Большинство начинающих вебмастеров (или веб программистов), при написании какого либо скрипта сталкиваются с большой кучей сложностей. И для их решения тратят немало времени, в таких условиях не приходится думать об излишествах, к которым также относят и кэширование страниц. Думая при этом — «мол зачем, и так все сойдет, ведь скрипт работает, страницу отображаются», и думают так, почем зря.Кэширование страниц не обходимо как правило большинству скриптов, систем, сайтов как правило которые имеют сравнительно большую посещаемость. Т.к. при каждом посещении пользователем страницу, серверу приходится генерировать ее заново, выполнять зачастую огромный php сценарий и обрабатывать уйму mySQL запросов. Что несомненно приводит к излишним затратам ресурсов сервера (нагрузка CPU, использование памяти). В результате чего система начинает работать очень медленно, а в некоторых случаях и вообще подвисать выдавая ошибку.
Кэширование решает такие проблемы, и по возможности желательно встраивать эту возможность во все ваши проекты которые ориентированы на большую или даже среднюю (1000-3000 уников в сутки) посещаемость.
Принцип работы довольна таки прост, во время генерации страницы, все её содержимое записывается в буфер, после чего отдается пользователю, и записывается на жесткий диск в виде простого файла содержащего статичный HTML код. После чего буфер очищается. При повторной загрузки страницы, она заново уже не генерируется, а просто берется готовый ранее сгенерированный её вариант из файла и отдается пользователю.
Что требует значительно меньше ресурсов сервера, не загружает память, и не грузит лишний раз SQL сервер.
Пример простого кэширования:
1. Создадим папку в корне вашего проекта и назавем ее /cache
2. Для безопасности, чтобы не кто посторонний кроме нашего скрипта не мог лазить в эту папку добавим в неё файл .htaccess, со следующим содержимым
Order Allow,Deny
Deny from all |
3. теперь переходим к самому кэшированию страницы, для этого в начале вставляем следующий PHP код
<? $url=$GLOBALS['REQUEST_URI']; $crc=md5($url); $modif=time()-@filemtime ("cache/$crc"); if ($modif<600) { include ("cache/$crc"); exit(); } ob_start (); ?> |
Этот код работает достаточно просто, сначалы мы генерируем MD5 хеш сумму, на основе полученного нами из переменной $GLOBALS['REQUEST_URI'] текущего адреса страницы. Полученный хеш мы будем использовать для обозначения имени файла, в котором будет хранится кэш данной страницы. Что очень удобно.
Затем в переменную <code>$modif
мы сохраняем время последнего изменения файла, и после сверяем его с заданным значением. Если время хранения меньше 600 (10 мин), то значит что кэш еще свежий, и мы просто выводим его пользователю используя include ("cache/$crc");
В противном случае запускаем буферизацию командой ob_start ();
После чего в самом низу страницы вставляем код: <p>58059e3114f7a51fdfa6df7598fec20f005</p> Этот код при его разборе тоже достаточно прост. Получаем содержимое буфера командой <code>ob_get_contents();
и ложим его в переменную $cache
, в буфере как понимаете у нас будет хранится вся страница целиком, в виде простого HTML кода. После чего очищаем буфер, дабы не забивать память сервера — ob_end_clean ();
. И на конец выводим все содержимое из переменной $cache в браузер пользователя.
На последок остается только сохранить все содержимое переменной $cache в файл с названием состоящим из хеша урла текущей страницы. Что мы собственно и делаем.
Для удобства стоит также реализовать в данном примере возможность отключить кэширование тогда когда это нужно.
Замечу, используя кэширование в своих проектах вы можете увеличить скорость работы всего сайта в десятки раз. Кэшированные страницы грузятся значительно быстрее.
П.С, В следующих постах расскажу как использовать готовый (удобный и гибкий) класс zend_cache для кэширования страниц.
Похожие записи
7 комментариев to “Кэширование в php, пример”
Оставить комментарий
Senior, Architector
предложить оффер
- Исполнитель пропал, почему такое случается и понять с кем работать? спросил (а) Артем
- Можно ли WordPress считать универсальным движком? спросил (а) Андрей
- Что такое самописный скрипт или CMS? спросил (а) Антон
- Как при поиске в linux используя grep, добавить исключения? спросил (а) Алексей
- Как создать публичный ключ в RSA? спросил (а) Сергей
- Интеграция Тинькофф банк Эквайринг на сайт для приема платежей к записи
- Скрипт парсинга форума к записи
- Интеграция по API с страховым маркетплейсом INSSMART к записи
- Интеграция Тинькофф банк Эквайринг на сайт для приема платежей к записи
- Joomla не пускает в админку к записи
- Все что нужно для работы с WSDL к записи
- Интеграция по API с страховым маркетплейсом INSSMART к записи
Archive
- +2023 (2)
- Март 2023 (1)
- Февраль 2023 (1)
- +2022 (21)
- Декабрь 2022 (11)
- Ноябрь 2022 (1)
- Май 2022 (2)
- Апрель 2022 (2)
- Март 2022 (3)
- Февраль 2022 (1)
- Январь 2022 (1)
- +2021 (17)
- Декабрь 2021 (5)
- Ноябрь 2021 (2)
- Июль 2021 (1)
- Июнь 2021 (2)
- Май 2021 (5)
- Апрель 2021 (1)
- Март 2021 (1)
- +2020 (20)
- Декабрь 2020 (6)
- Сентябрь 2020 (2)
- Август 2020 (1)
- Июль 2020 (2)
- Май 2020 (2)
- Апрель 2020 (2)
- Март 2020 (2)
- Февраль 2020 (1)
- Январь 2020 (2)
- +2019 (18)
- Декабрь 2019 (3)
- Ноябрь 2019 (2)
- Октябрь 2019 (2)
- Сентябрь 2019 (1)
- Август 2019 (2)
- Июль 2019 (1)
- Июнь 2019 (1)
- Апрель 2019 (2)
- Март 2019 (1)
- Февраль 2019 (3)
- +2018 (44)
- Декабрь 2018 (4)
- Ноябрь 2018 (7)
- Октябрь 2018 (8)
- Сентябрь 2018 (1)
- Август 2018 (4)
- Июль 2018 (5)
- Май 2018 (3)
- Апрель 2018 (7)
- Март 2018 (1)
- Февраль 2018 (2)
- Январь 2018 (2)
- +2017 (19)
- Декабрь 2017 (2)
- Ноябрь 2017 (1)
- Октябрь 2017 (1)
- Сентябрь 2017 (2)
- Июль 2017 (1)
- Июнь 2017 (1)
- Май 2017 (2)
- Апрель 2017 (3)
- Март 2017 (2)
- Февраль 2017 (1)
- Январь 2017 (3)
- +2016 (37)
- Декабрь 2016 (3)
- Ноябрь 2016 (3)
- Октябрь 2016 (2)
- Сентябрь 2016 (3)
- Август 2016 (7)
- Июнь 2016 (3)
- Май 2016 (3)
- Апрель 2016 (3)
- Март 2016 (1)
- Февраль 2016 (1)
- Январь 2016 (8)
- +2015 (36)
- Ноябрь 2015 (5)
- Октябрь 2015 (4)
- Сентябрь 2015 (1)
- Август 2015 (8)
- Июнь 2015 (1)
- Май 2015 (4)
- Апрель 2015 (8)
- Март 2015 (3)
- Февраль 2015 (2)
- +2014 (26)
- Ноябрь 2014 (2)
- Октябрь 2014 (5)
- Сентябрь 2014 (6)
- Июль 2014 (1)
- Июнь 2014 (2)
- Май 2014 (3)
- Апрель 2014 (6)
- Февраль 2014 (1)
- +2013 (27)
- Декабрь 2013 (2)
- Ноябрь 2013 (1)
- Октябрь 2013 (1)
- Август 2013 (1)
- Июль 2013 (3)
- Июнь 2013 (10)
- Май 2013 (1)
- Апрель 2013 (2)
- Февраль 2013 (3)
- Январь 2013 (3)
- +2012 (42)
- Декабрь 2012 (2)
- Ноябрь 2012 (3)
- Октябрь 2012 (7)
- Сентябрь 2012 (2)
- Август 2012 (1)
- Июль 2012 (3)
- Июнь 2012 (2)
- Май 2012 (6)
- Апрель 2012 (2)
- Март 2012 (8)
- Февраль 2012 (5)
- Январь 2012 (1)
- +2011 (57)
- Декабрь 2011 (6)
- Ноябрь 2011 (2)
- Октябрь 2011 (3)
- Сентябрь 2011 (5)
- Август 2011 (4)
- Июль 2011 (3)
- Июнь 2011 (3)
- Май 2011 (3)
- Апрель 2011 (4)
- Март 2011 (10)
- Февраль 2011 (5)
- Январь 2011 (9)
- +2010 (43)
- Декабрь 2010 (7)
- Ноябрь 2010 (21)
- Октябрь 2010 (14)
- Сентябрь 2010 (1)
Свежие записи
- Почему на сайте, что-то может «само» сломаться? 16.03.2023
- Как быстро писать статьи под низкочастотные запросы 28.02.2023
- Разработка сайта для Андрея Ковалёва 30.12.2022
- Разработка плагина для WordPress — Аудиогид 12.12.2022
- Оптимизация скорости работы сайта, поиск слабых мест (от CPU до MySQL) 07.12.2022
Всё тот же вопрос..-нет ли подобного скрипта для вставки в шаблон php а не в корень сайта?Если есть-будьте добры-выложите сам скрипт.Думаю многие будут благодарны в том числе и я!
Собственно представленный скрипт, можно вставить в любое места вашего скрипта. Нет необходимости вставлять его в корень.
Не понял…Тоесть эти коды вставить в html-шаблон и всё?А разве не нужно что-то типа
код
не пробивает начало и конец закрытия скрипта..script type=»text/javascript» код /script -типо этого..
это код примера на PHP, его нужно вставлять в скрипт (с расширением .PHP)
Роман-ссори,но я не в курсе какое расширение пхп..Если не трудно-выложите код,чтобы я просто вставил правильный скрипт в шаблон..
шикарно и просто никогда не задумывался об это и не встречал.
Хочу добавить, по сути любая страница набор статических и динамических блоков, дак вот применять этот механизм непосредственно к статичным блокам дающим нагрузку на сервер (><)