ВВЕДЕНИЕ 5
1 Исследование поведения интерпретатора РНР 6
1.1 Исследование поведения РНР при работе с базами данных 6
Е2 Исследование эффективности современных трансляторов кода РНР 8 ЕЗ Исследование современных методов шаблонизированная сайтов и Web-приложений 9
2 Решение поставленных задач 10
2.1 Описание метода оптимизации работы с базой данных 10
2.2 Описание реализованного метода кэширования 11
2.3 Шаблонизатор 12
2.4 Интегрирование шаблонизатора Mustache 12
3 Реализация предложенных методов 15
3.1 Реализация эффективных методов для работы с базами данных 15
3.1.1 Интерфейс класса DatabaseMgr 17
3.1.2 Интерфейс драйверов баз данных 19
3.2 Реализация эффективных методов кэширования 19
3.2.1 Интерфейс ICache, CacheMgr 20
3.3 Интерфейс шаблонизатора. 20
4 Тестирование 22
4.1 Тестирование предложенной реализации метода эффективной
работы с базами данных 22
4.2 Тестирование предложенной реализации эффективной системы
кэширования 23
5 Коммерческое использование 25
ЗАКЛЮЧЕНИЕ 26
ЛИТЕРАТУРА 27
ПРИЛОЖЕНИЕ А Ресурс распространения системы 28
ПРИЛОЖЕНИЕ Б Начальная стоимость системы и её редакции 29
ПРИЛОЖЕНИЕ В Главная страница панели администратора системы 30 ПРИЛОЖЕНИЕ Г Встроенное средство редактирования шаблонов 31
В современном мире IT индустрии сетевые технологии стали неотъемлемой частью жизни. На базе сетевых взаимодействий работает бесконечное число различных сервисов, программ, игр, в том числе и многопользовательских.
Сети позволяют миллионам людей оставаться на связи 24 часа в сутки, 7 дней в неделю за счет множества серверов расположенных по всему миру и самые распространенные из них - WEB-серверы. По статистике предоставленной Netcraft, только в 2014 году насчитывалось более 1 миллиарда открытых для пользователей сайтов (прим. Речь идет об узлах сети).
Когда язык HTML приобрел свой знакомый нам вид, встал вопрос об управлении контентом сайтов и таким образом появилось понятие CMS (Content Management System — Система управления контентом). Под эти цели можно использовать практически любой язык программирования, но большую популярность получили такие языки, как PERL и РНР ввиду того, что они не требуют предварительной компиляции и являются интерпретируемыми языками. О последнем языке программирования я и буду говорить.
РНР [4] — Препроцессор гипертекстовой разметки, изначально разработанный в 1995 году для создания простых персональных сайтов. Сейчас РНР поддерживается на подавляющем количестве хостингов и является одним из лидеров рынка.
Самой большой проблемой интерпретируемых языков является время обработки запросов пользователя, так как сначала происходит полная выгрузка сценариев, в том числе и подключаемых по ходу действия программы из сторонних файлов в память сервиса РНР, далее разбирается на лексемы, транслируются во внутренние команды РНР изначально реализованные на C/C++.
Для решения данной проблемы существует множество различных реализаций, основанных на ускорении одного из этапов работы программ написанных на РНР. Самыми распространенными являются:
Phar — сокращает время обработки за счет исключения из процесса трансляции время ожидания открытия всех включаемых файлов изначально компилируя из них цельный проект-документ одним файлом.
Phalcon — Фреймворк для разработки конечного приложения в рамках паттерна MVC (Model - View - Controller), и так же при запуске сервера производящий компиляцию проекта в более приятный для сервера как программы байт-код.
Из платных аналогов стоит выделить Zend server.
Zend — Отдельный плагин для РНР написанный на C/C++ командой разработчиков Zend, аналогично Phalcon производит компиляцию в байт-код и оптимизирует его исключая некоторые типичные ошибки программиста, так же имеет свой встроенный фреймворк Zend Framework.
Данные решения ускоряют скорость трансляции проекта, но что если этого не достаточно?
И если программные оптимизаторы решают проблемы включения файлов скриптов, то самыми узкими местами любого WEB-приложения являются моменты работы с базой данных, выбор использования того или иного блока управления бизнес- логики и работа с файлами шаблонов, для формирования ответа пользователю.
По результатом анализа работы РНР интерпретатора перед нами были поставлены задачи:
1. Ускорение работы с базами данных
2. Сокращение транслируемого РНР кода
3. Ускорение работы с шаблонами
Уже существуют программные решения данных проблем, например кРНР (kittenPHP) созданный командой разработчиков социальной сети Вконтакте, примечательно, что за счет внесения строгого типизирования переменных и строгих ограничений функционала ООП они добились двукратного ускорения обработки запросов сервером.
Так как далеко не все хостинги поддерживают Phalcon, Zend и прочие оптимизаторы, в ходе решения данных проблем, нами была разработана полноценная CMS (Content Management System — система управления контентом), на базе чистого РНР версии 5.2, и в дальнейшем планируется её адаптация под РНР версии 7.1.
Данная CMS реализует нетипичные подходы для решения определенных ранее задач.
Сама система своей структурой реализует паттерн MVC и позволяет разработчику создать приложение наиболее точно подходящее под поставленные перед ним задачи.
1 Исследование поведения интерпретатора РНР
РНР — интерпретируемый язык программирования, инструмент для создания сайтов и веб-приложений. В первую очередь используется для оживления сайтов и наделения их определенной логикой. Как и в любом другом языке программирования предел возможностей определяется ресурсами. Основными ресурсами в Web- приложениях считаются: базы данных, файловая система, оперативная память. Следовательно, отложив особенности языка в сторону, стоит подробнее разобраться в проблемах связанных с ресурсами.
Была поставлена задача оптимизировать работу веб-серверов без использования дополнительных надстроек и библиотек. В ходе решения данной задачи разработана полноценная система управления контентом, которая содержит в себе реализации методов оптимизации работы с базой данных. Таким образом, поставленные задачи в ходе выполнения данной работы были полностью выполнены. Разработанная система продается на рынке ПО и эксплуатируется в нескольких компаниях:
— ООО «Бизнес и Право»;
— EvaBox;
— Tivolyo Home.