Почему изменения на сайте видны с большой задержкой
PHP

Почему изменения в PHP-скриптах отображаются с большой задержкой

15 сентября 2017

Мне неоднократно задавали вопрос — почему на некоторых хостингах при сохранении PHP-файлов по FTP/SFTP изменения видны не сразу, а часто с опозданием в несколько минут. Рассказываю, откуда берется этот эффект и как от него избавиться.

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

Кеширование Вордпресс

Например, в популярном плагине WP Super Cache кеширование для известных пользователей отключается одной галочкой.

В плагине WP Super Cache кеширование для авторизованных пользователей отключается одной галочкой

Чтобы полностью исключить влияние плагинов кеширования, на время отладки их можно вообще деактивировать.

Браузерное кеширование

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

Обновить страницу с принудительной перезагрузкой всех данных можно с помощью комбинации Cmd+Shift+R на Маках и Ctrl+Shift+R под Виндоус. Можно воспользоваться режимом «Частный доступ» в Сафари или режимом «Инкогнито» в Хроме. Оба режима вызываются одной комбинацией Cmd+Shift+N.

Режим Инкогнито в Гугл Хроме

Серверное кеширование OPCache

Если вы точно уверены, что проблемы создает не кеш браузера и не кеш Вордпресс, похоже, что у вас включено серверное кеширование.

Его внезапное появление часто связано с повышением версии PHP. Например, у вас на хостинге был включен PHP 5.3, а после перехода на PHP 7 изменения в PHP-скриптах вдруг стали появляться с большим опозданием. Если так, скорее всего ваш PHP работает с активным механизмом кеширования байт-кода, который называется OPCache.

Для справки

PHP-код перед выполнением компилируется в байт-код. В старых версиях PHP компиляция выполнялась каждый раз при выполнении скрипта, в новых OPCache хранит байт-код в памяти и выполняет его при повторном запросе. Это дает большой прирост в скорости, снижении нагрузки и т.д.

Естественно, заниматься отладкой кода с активным OPCache очень некомфортно. Поэтому, если отладка происходит на боевом сайте, кеширование на время работ лучше отключить. Делается это очень просто, добавлением одной строчки в php.ini.

Как отключить

В качестве примера, покажу как отключается OPCache в панели ISP виртуального хостинга Рег.ру.

Подключаемся к серверу по FTP или открываем файловый менеджер в панели управления хостингом, идем в директорию php-bin, выбираем файл php.ini и нажимаем «Изменить».

Подключаемся к серверу по FTP или открываем файловый менеджер в панели управления хостингом и идем в директорию php-bin.

Для PHP версий 5.5, 5.6, 7.0, 7.1 добавляем такую строку.


opcache.enable = Off

В старых версиях PHP 5.3 и 5.4 чаще всего используется XCache, он отключается такой строчкой.


xcache.cacher = Off

Чтобы изменения вступили в силу, нужно перезагрузить сервер.

Ручная перезагрузка доступна не везде, поэтому перезагрузить принудительно сервер можно, сменив версию PHP на более старую, а потом снова вернуть рабочую.

Сменить версию PHP

После отладки не забудьте снова включить OPCache и перезагрузить сервер.

Все таки OPCache существенно экономит ресурсы, и будет не совсем разумно от него отказываться.

И напомню, проверить версию PHP и узнать обо всех установленных расширениях можно с помощью функции phpinfo();

Иван Данилин
Автор: Иван Данилин

Практикующий веб-разработчик, специализируюсь на платформе Вордпресс.

ПОДПИСАТЬСЯ

Добавить комментарий

Лидер среди российских регистраторов доменных имён и хостинг-провадейров