"Влияние производительности" при использовании 20K строк одного класса

Этот вопрос был задан здесь, но ни один из ответов не попытался ответить на действительно заданный вопрос, поэтому я спрашиваю об этом по-другому. Является ли загрузка одного класса из 20 000 строк с 100 функциями более ресурсоемкой, чем разложение кода на меньшие классы с меньшим количеством функций и загрузкой этих меньших классов по мере необходимости?

Ответ 1

Чем больше a script или класс, тем больше памяти используется для каждого экземпляра. Конечно, PHP не имеет возможности разделить пространство памяти с библиотеками и классами, поэтому создание массовых скриптов для веб-сайта - отличная идея.

Типичный подход должен заключаться в том, чтобы разбивать классы на блоки таким образом, что вам нужно включить только script то, что вам действительно нужно выполнить, чтобы script.

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

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

Однако размер каждого экземпляра класса зависит только от данных, которые он хранит. Эта коррекция в сторону, совет здесь спонтанна: разделить свои классы на основе обязанностей. Причина этого также связана с простотой разработки, чем с производительностью. Скажем, у вас есть один класс монстров, заполненный статическими методами. Если ваше приложение использует большинство этих методов для каждого запроса, его разделение не будет иметь преимуществ по производительности, потому что оба сценария в конечном итоге будут загружаться. Но если вы можете сгруппировать методы в логические подсистемы, их будет легче понять и работать.

Ответ 2

Один большой класс требует одного цикла для компиляции в двоичный код (op-code).

Многие более мелкие классы используют меньшую память, но требуют большей компиляции, и память для компиляции будет накапливаться.

Действительно зависит от того, сколько классов/файлов было включено во время выполнения.

Итак, решение для этого, разбейте на несколько классов и используйте APC или эквивалент.

PS: потребление памяти для большого файла намного меньше, потому что PHP не нужно повторно компилировать исходный код в op-код (если вы неохотно разбиваете большой класс на меньший)