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 байт.