Сколько ресурсов потребляет большой php-файл с множеством функций. Стоит ли его разбить на более мелкие?
Сервер Ubuntu. PHP 7.2.
Имеется веб-сайт с несколькими сервисами. Каждый сервис использует свой набор функций (их достаточно много, некоторые из них запрашиваются несколькими сервисами сайта).
Все функции прописаны в файле functions.php, который подключается (include_once) при любом запросе пользователя к сайту.
Вопрос такой: Этот файл при каждом обращении "создает копию себя" в памяти сервера? Или же "висит" в единственном экземпляре?
Стоит ли с точки зрения экономии ресурсов разбить файл functions.php на несколько более мелких файлов и подключать их по мере необходимости?
Знаю что при изменении даты php-файла PHP единожды его "компилирует", а затем уже запускает его мгновенно. Что дальше происходит и как расходуются память и другие ресурсы - не знаю.
Ответы (1 шт):
При всём уважении, Вы не совсем верно оцениваете, из за чего происходит расходование серверных ресурсов.
PHP-интерпретируемый язык. Каким бы большим не был Ваш файл, его размер пренебрежимо мал по сравнению с памятью и процессорным временем, котрые нужны будут для его интерпретации и выполнения.
Более того, если исключить такие конструкции, как глобальные переменные, то выделение памяти, инициализация объектов и выполнение методов этих объектов происходит только в тот момент, когда процесс выполнения доходит до этих обектов. Грубо говоря, если у Вас объявлен большой массив в функции f1(), то до тех пор, пока функция f1() не будет вызвана - память под массив выделяться не будет.
Таким образом, еслиу Вас последовательность вызовов функций в случае "одной большой страницы" и "множества маленьких страниц" одна и та же - то отличия в используемых при этом ресурсах будут чисто косметическими.
"Вопрос такой: Этот файл при каждом обращении "создает копию себя" в памяти сервера? Или же "висит" в единственном экземпляре?" - копия файла в памяти сервера не создаётся. Создаются структуры, имеющие отношение к интерпретации файла - грубо говоря, AST. Именно это процесс Вы в вопросе называете "компиляцией". Эти структуры создаются при первом обращении к файлу в единственном экземпляре. А на каждую пользовательскую сессию создаются все эти штуки, имеющие отношение к переменным - глобальные переменные, локальные переменный и т.п. Они создаются на время обработки страницы и "умирают" после того, как ответ отправлен клиенту.
Есть в PHP8 интересная технология (существующая на свете лет 20-25), которая называется JIT. Эта технология немного ближе к "компиляции". Кстати, в этой статье есть и ссылка, котрая гораздо лучше, чем я, объясняет "как работает php".
Если у Вас остались вопросы или нужно что то уточнить - милости просим!