У меня есть пользовательский фреймворк, написанный на PHP, который мне поручено оптимизировать. Эта структура является общей кодовой базой, которая загружает MVC-модули для обеспечения различных функциональных возможностей. Каждый модуль представляет собой каталог, содержащий несколько классов PHP для контроллеров и моделей и файлы PHP для представлений.
Вся структура загружается практически для всех запросов, включая изображения и таблицы стилей. Это связано с тем, что модули спроектированы как автономные пакеты и могут содержать изображения, таблицы стилей, javascripts или другие статические файлы. Из-за этого возникают издержки при обслуживании, что обычно является очень простым запросом, поскольку система должна загрузить все модули просто для того, чтобы определить, какие модули доступны для извлечения статических файлов.
Общий процесс обработки любого заданного URI следующий:
- Все базовые системные классы включены
- Установлен глобальный обработчик исключений и некоторые глобальные переменные
- Считывается системный файл конфигурации. (Это файл, заполненный инструкциями PHP для установки переменных конфигурации)
- Соединение с базой данных установлено
- Папка модулей сканируется с помощью opendir (), и каждый модуль проверяется на корректность и отсутствие синтаксических ошибок, а затем включается.
- Загружен второй файл конфигурации, который устанавливает конфигурацию для модулей
- Создается новый экземпляр каждого модуля (вызывая его метод __construct () и, возможно, создавая другие подключения к базе данных, выполняя отдельные процедуры запуска и т. Д.)
- URI проверяется и передается в соответствующий модуль
Шаги 1 - 7 почти всегда будут одинаковыми. Они всегда будут выполнять одни и те же операции, если новые модули не установлены или файл конфигурации не изменен. У меня вопрос, что можно сделать, чтобы оптимизировать процесс? В идеале, я бы хотел какой-то способ обработки нескольких запросов, аналогичный тому, как работают запросы KeepAlive. Все накладные расходы на инициализацию всех модулей кажутся пустой тратой только на чтение () одного файла изображения или файла CSS, просто на то, чтобы эти же накладные расходы снова были обработаны для другого запроса.
Есть ли способ уменьшить накладные расходы фреймворка, как это? (Я даже не знаю, может ли кто-нибудь помочь мне, не изучив весь код, это может быть безнадежным вопросом)