Есть ли большие накладные расходы на включение коллекции длинных функций в PHP?

#php

#php

Вопрос:

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

Есть ли какие-либо существенные недостатки в том, чтобы делать что-то таким образом, с точки зрения производительности? Я мог бы разделить файл на несколько в зависимости от типа предоставляемой функциональности, но строго с точки зрения производительности, плохо ли включать все на каждую страницу, но запускать только то, что необходимо?

Ответ №1:

Честно говоря, я бы больше беспокоился о ремонтопригодности вашего кода, чем о размере файла. (Если вы считаете, что базу кода будет легче поддерживать, если ее разбить на файлы меньшего размера в зависимости от функциональности, то было бы разумно сделать это.)

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

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

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

Ответ №2:

Поскольку PHP не использует JIT-подход, он сначала скомпилирует ваш скрипт в байт-код, что может занять немного времени, если ваш скрипт очень большой. Однако при использовании кэша optcode, такого как APC или XCache, это имеет значение только для первого попадания. В качестве последующих обращений после этого используйте уже кэшированную версию байт-кода.

Комментарии:

1. ? Я сказал, что PHP не выполняет JIT, но поддерживает кэширование результирующего байт-кода.

Ответ №3:

Нет, это не имеет значения.
Когда дело дойдет до реального вопроса производительности, в вашем распоряжении будет решение.

Комментарии:

1. И каким решением это может быть?

2. @Chris да. Это означает, что тогда возникает реальная проблема с производительностью, а не воображаемые «что, если». Вы видите разницу?

3. Да, сначала не думайте, а потом, когда у вас возникнет проблема, надейтесь, что есть решение, что оно будет соответствовать вашим потребностям / инфраструктуре / дизайну кода. Видите? больше никаких проблем.