PHP код операции памяти во время включения?

При оптимизации сайта под память я заметил скачок в потреблении памяти, в то же время включив большое количество файлов классов PHP (600+) для конкретной цели. Разбирая вещи, я заметил, что включение файла PHP (и, следовательно, его компиляция в коды операций) занимает примерно в 50 раз больше памяти, чем размер файла на диске.

В моем случае файлы на диске вместе имеют размер около 800 кБ (с отступами и комментариями, объявлениями чистых классов, а не множеством строк), однако после их включения потребление памяти было на 40 МБ выше.

Я измерил так (PHP 5.3.6):

echo memory_get_usage(), "<br>\n";
include($file);
echo memory_get_usage(), "<br>\n";

В течение цикла из 600 файлов я могу наблюдать, как потребление памяти увеличивается с нуля до 40 МБ. (Не существует дополнительных классов загрузки автозагрузчика или какого-либо глобального кода или кода конструктора, который выполняется немедленно, это действительно только чистое включение.)

Это нормальное поведение? Я предполагал, что коды операций являются более компактными, чем чистый исходный код (убирая все пробелы и комментарии, или имея, например, только один или два байта инструкции вместо строки "foreach" и т. Д.)?

Если это нормально, есть ли способ оптимизировать его? (Я предполагаю, что использование кэша кода операции просто сэкономит мне время компиляции, а не фактическое потребление памяти?)

1 ответ

Решение

Видимо, так оно и есть.

Я перепроверил это с нуля:

  • Включить пустой файл нулевой длины: увеличение потребления памяти на 784 байта
  • Включить пустое определение класса X { }: 2128 байт
  • Включить класс с одним пустым методом: 2816 байт
  • Включите класс с двумя пустыми методами: 3504 байта

Размер файла включаемого файла во всех тестах составляет менее 150 байт.

Другие вопросы по тегам