Сколько ресурсов потребляет большой php-файл с множеством функций. Стоит ли его разбить на более мелкие?

Сервер Ubuntu. PHP 7.2.

Имеется веб-сайт с несколькими сервисами. Каждый сервис использует свой набор функций (их достаточно много, некоторые из них запрашиваются несколькими сервисами сайта).

Все функции прописаны в файле functions.php, который подключается (include_once) при любом запросе пользователя к сайту.

Вопрос такой: Этот файл при каждом обращении "создает копию себя" в памяти сервера? Или же "висит" в единственном экземпляре?

Стоит ли с точки зрения экономии ресурсов разбить файл functions.php на несколько более мелких файлов и подключать их по мере необходимости?

Знаю что при изменении даты php-файла PHP единожды его "компилирует", а затем уже запускает его мгновенно. Что дальше происходит и как расходуются память и другие ресурсы - не знаю.


Ответы (1 шт):

Автор решения: S.H.

При всём уважении, Вы не совсем верно оцениваете, из за чего происходит расходование серверных ресурсов.

PHP-интерпретируемый язык. Каким бы большим не был Ваш файл, его размер пренебрежимо мал по сравнению с памятью и процессорным временем, котрые нужны будут для его интерпретации и выполнения.

Более того, если исключить такие конструкции, как глобальные переменные, то выделение памяти, инициализация объектов и выполнение методов этих объектов происходит только в тот момент, когда процесс выполнения доходит до этих обектов. Грубо говоря, если у Вас объявлен большой массив в функции f1(), то до тех пор, пока функция f1() не будет вызвана - память под массив выделяться не будет.

Таким образом, еслиу Вас последовательность вызовов функций в случае "одной большой страницы" и "множества маленьких страниц" одна и та же - то отличия в используемых при этом ресурсах будут чисто косметическими.

"Вопрос такой: Этот файл при каждом обращении "создает копию себя" в памяти сервера? Или же "висит" в единственном экземпляре?" - копия файла в памяти сервера не создаётся. Создаются структуры, имеющие отношение к интерпретации файла - грубо говоря, AST. Именно это процесс Вы в вопросе называете "компиляцией". Эти структуры создаются при первом обращении к файлу в единственном экземпляре. А на каждую пользовательскую сессию создаются все эти штуки, имеющие отношение к переменным - глобальные переменные, локальные переменный и т.п. Они создаются на время обработки страницы и "умирают" после того, как ответ отправлен клиенту.

Есть в PHP8 интересная технология (существующая на свете лет 20-25), которая называется JIT. Эта технология немного ближе к "компиляции". Кстати, в этой статье есть и ссылка, котрая гораздо лучше, чем я, объясняет "как работает php".

Если у Вас остались вопросы или нужно что то уточнить - милости просим!

→ Ссылка