Рассуждение об оптимизации CMS на PHP
Несколько лет я проектировал одну ЦМС. Изначально это был просто вывод статей и новостей. Текст содержался в базе данных, в папках хранились файлы.
Прошло время, ЦМС стала модифицироваться. Сначала я сделал регистрацию пользователей, потом прикрутил интернет-магазин, после сервис сообщений, блоги, настройку профилей и много всего другого.
И вот настал момент :), как догадался читатель, пошла огромная нагрузка. Сайт располагался на обычном хостинге и на большие ресурсы чем "чуть-чуть" рассчитывать не приходилось.
Оптимизация длилась почти три месяца, сейчас я расскажу основные методы и аспекты, которые позволили снизить нагрузку почти 15 раз.
1. В запросах SQL ни в коем случае не используйте "*", лучше и правда, как везде пишут перечислять поля.
2. Создайте классы, например для работы с базами данных, кэшированием системы.
3. Занового пересмотрите свои функции, уверен вы найдете там что можно выкинуть или переписать.
4. Разделите свою ЦМС на модули и подгружайте только тот, который нужен.
5. Скорость загрузки напрямую зависит от скорости исполнения скриптов, поэтому делайте как можно меньше обращений к базе и выполнений скриптов. Знаю, что без этого не обойтись. Тем не менее настоятельно рекомендую воспользоваться функцией ob_start, с помощью нее вы сможете кэшировать участки страницы, затем сохранять их в папку, откуда потом будете их считавать. Например, зачем считывать статью из базы каждый раз, если можно просто закэшировать ее в HTML файл и подгружать его потом. Ускоряет процесс почти в 50 раз. Т.е. страница где текст грузится моментально.
6. Используйте gzip сжатие контента, когда отдаете его браузеру. Об этом вы можете прочитать в другой моей статье, там же найдете и исходник.
Вот примерно весь список, благодаря которому я смог ускорить загрузку страниц и работу ЦМС во много раз. Сейчас на этой ЦМС работает :)
Остальные аспекты мы разберем в следующих статьях.

(4 votes, average: 4,25 из 5)
1 Комментарий на «Рассуждение об оптимизации CMS на PHP»
А как называется ваша ЦМС?
Ответить