Вот вы под какой операционкой сидите? Если это Linux, то все отлично. Если Windows, то наверно замечали ощутимые тормоза. А задумывались, почему так?
Ищем узкое место
Обычно я веду разработку под Linux или vbox, поэтому, в силу этих фактов, редко обращал внимание на скорость админки под Win. С недавнего времени стал чаще пользоваться продуктами мелкомягких.
Обратил внимание, что сайт на локале тормозит ну оооочень сильно. Причем не просто сильно, а целых 1.5 секунды вместо привычных 0.5 (или 0,15 на линуксе)! WTF?
Я полез ковыряться, чтобы найти корень зла. Через 15 минут я обнаружил такой вот кусок кода:
Лежит он по этому пути: administrator/components/com_zoo/zoo.php
Здесь мы видим 3 фрагмента:
- Проверка обновлений ZOO
- Проверка зависимостей между расширениями
- Проверка что media доступен для записи.
Первые два пункта тормозят систему, но не существенно. А последний — это бомба!
Скрипт проходит по ВСЕМ файлам из директории media/zoo и проверяет КАЖДУЮ директорию и файл на возможность записи. Теперь посмотрим, сколько файлов и папок в минимальной сборке. Около 1000.
Выходит, что более 1000 заведомо медленных операций. Ситуация усугубляется тем, что все миниатюры после ресайза компонент ZOO хранит именно в папке media (кажется они это сделали в версии 3.3.6).
О, YOOtheme! Такой причуды мы от тебя не ждали!
Обычно они пишут код качественно, а тут их программист встал не с той ноги. В итоге, чем больше у нас картинок, элементов, каталогов и прочих расширений тем медленнее ЛЮБАЯ страница ZOO в админке.
Но для чего же YOOtheme написали эти строки?
Чтобы проверить, а доступна ли папка для записи картинок и настроек элементов. Когда картинки пережимаются, их уменьшенные копии складываются в эту папку. Но это достаточно проверить раз в 100 лет. А не лазить туда постоянно при каждой перезагрузке страницы. Если у вас сайт работает нормально и картинки не отваливаются, то комментируйте эти строки без опасения.
Тестируем…
Я закомментировал только проверку на запись, и получил +1.0 секунды скорости в админке ZOO под Windows. Это притом, что у меня довольно мощный компьютер и SSD.
Т.е админка ускорилась аж в 3 раза!
Вот такие показатели скорости были до комментирования:
Такие стали после:
Теперь посмотрим что с Linux. Я закомментировал эти строки на демо-сайте (под debian), скорость админки увеличилась всего на 0.2 сек. Мелочь, а приятно.
А вот что пишут те, кто прочитал эту тему в нашем сообществе и попробовал на себе:
Так все-таки, почему сайты тормозят под Windows?
Самое медленное место в любом компьютере — это его файловая система, а точнее система ввода-вывода. И несмотря на то, что недавно произошла революция с SSD-дисками, оперативная память и процессор все равно будут в сотни раз быстрее.
Если мы посмотрим на это с точки зрения сайта, то увидим тысячи (а то и десятки тысяч) мелких файлов. И для рендеринга одной страницы PHP вынужден напрягать нашу файловую систему, т. к. должен проверять, читать, записывать мелкие файлы. К сожалению, файловая система NTFS работает быстро только с относительно большими файлами (1–2 МБ и больше). Этого вполне хватает, чтобы раскладывать фоточки котиков по папкам.
Почему так происходит? У NTFS есть масса фич, таких как аудит, права доступа, безопасность, защита данных, защита от сбоев и т. д. Любой запрос, будь то на чтение или запись, будет вынужден пройти все эти подсистемы. В Linux ПО для работы с файлами устроено совершенно иначе. Более того, вся операционка состоит из огромного количества мелких файлов. Соответственно, там нет таких проблем изначально.
В довесок ко всему помним, что под Windows мы используем портированный софт, который изначально был написан для Linux. Такой софт умеет работать в Windows, но явно не предназначен для этого. Поэтому, под Windows вас не спасет даже RAM-диск (проверено), который в десятки раз быстрее SSD.
Я уж не говорю про антивирусы, которые проверяют любые поползновения в файлах… И это, конечно, хорошо, но накладывает проблему производительности.
Примечание:
Все проверялось на последнем ZOO 3.3.15, но думаю это старый баг.
JBZoo и его версия вообще не имеет никакого отношения к происходящему, т. к. выполняется намного позже инициализации компонента.
А как у вас изменилась скорость после комментирования этих строк?
На продакшн (linux) не стал трогать - там VDS - и права бывают чудят.
На локалке отлично :)
А у меня в файле zoo.php вообще нет этих строк...
Возможно вы не тот файл смотрите - administrator\components\com_zoo\zoo.php (компонент ZOO именно в папке "administrator")
Так точно! Спасибо, Денис!
Огромное спасибо за данный пост!)
Подскажите как закомментировать эти строки?
Подскажите как закомментировать эти строки?
Просто удалите или закомментируйте указанный на скриншоте блок в файле zoo.php
http://php.net/manual/ru/language.basic-syntax.comments.php
На win стало работать примерно в два раза быстрее.
Я думаю это зависит от конфигурации компьютера, но у меня перезагрузка страниц в админке всегда была 2 сек. сейчас 1 сек. Круто !