Оптимайз

Я тут кое-что пишу на php. Ситуация: В корне лежит только .htaccess и index.php, остальные файлы лежат в /system. «Остальные файлы» — это функции, функции, функции. Для того, чтобы было удобно, все функции, которые отвечают за что-то одно, лежат в одном файле, а все, которые отвечают за другое — в другом. Это позволяет найти любую функцию практически мгновенно: в каждом файле их всего по две-три. Однако самих файлов, а, соответственно, и количество include’ов в начале index.php, становится всё больше и больше. И больше. И вот уже page generation time приближается к десятой доле секунды при том, что ничего серьезного пока не делается.

Заметив, что всё сильно тормозит, я решил заняться оптимизацией. Вдруг до меня дошло то, что я изложил в первом абзаце: при открытии каждой страницы бедному php приходится открывать больше дюжины файлов! Ради эксперимента я скидал все функции в один файл и посмотрел, что произошо. Всё стало работать в 10-15 раз быстрее. Расставаться с привычным разбрасыванием функций по файлам ой как не хотелось, потому, что первых очень много и найти что-то нужное в одном файле очень трудно. Поэтому я стал думать, как сохранить и достигнутую высокую скорость, и удобство работы с файлами.

Решение придумалось быстро. Смысл такой. В начале index.php пишем:

if (@$_GET[’rebuild’]) {
 … // см. ниже
};
if (is_file (’all.php’)) include ’all.php’; else {
 include …;
 include …;
 include …;
}

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

Есть! Теперь всё работает очень быстро, а функции по-прежнему лежат в привычных файлах. Осталость впихнуть в удобное место ссылку <a href="?rebuild">Rebuild!</a>; не забывать на неё давить после изменений исходников.

Дима Смирнов сообщает, что можно заметно (процентов на 15) поднять производительность, если перед пиханием файлов в all.php вырезать из них комментарии и разметку (табуляцию, ньюлайны).

Дальше
Мои книги