Docket Cache — ускоритель кэширования объектов

Описание

Docket Cache — постоянный объектный кеш для WordPress, который хранит кешированные данные в виде обычного PHP-кода. Он задуман как альтернатива для сайтов, у которых нет доступа к Redis или Memcached.

Большинство плагинов файлового кеширования используют сериализацию и десериализацию, чтобы сохранять объекты PHP в обычные файлы. Docket Cache использует другой подход и преобразует объекты в обычный PHP-код. Это ускоряет получение данных и повышает общую производительность, особенно при включённом Zend OPcache.

Подробнее см. в разделе документации Кеширование в WordPress.

Зачем нужен этот плагин?

Для надёжного постоянного объектного кеша в WordPress лучше всего подходят Redis или Memcached. Однако они требуют знаний в администрировании сервера и редко доступны на недорогих тарифах или виртуальном хостинге.

Альтернатива — хранить объектный кеш в файлах. В WordPress экспорт объектов PHP — непростая задача. Большинство плагинов файлового кеширования сохраняют и извлекают данные с помощью сериализации и десериализации объектов.

Docket Cache использует более удачный подход и превращает объектный кеш в обычный PHP-код. Это быстрее, потому что WordPress может использовать кеш напрямую, без дополнительной обработки.

Возможности

  • Объектное кеширование + OPcache
  • Расширенное кеширование записей
  • Precache объектного кеша
  • Кэширование меню WordPress
  • Кеширование переводов WordPress
  • Оптимизация запросов ядра WordPress
  • Оптимизация запросов подсчёта терминов
  • Оптимизация подсчёта записей, страниц и комментариев
  • Оптимизация таблиц базы данных
  • Оптимизация WooCommerce
  • Приостановка Autoload параметров WP
  • Исправление пропущенного расписания записей
  • Объектный кеш + статистика OPcache + просмотр OPcache
  • Журнал кеша
  • Служба Cronbot
  • Поддержка WP-CLI
  • Поддержка мультисайта / мультисети

Требования

Минимальные требования для использования Docket Cache:

  • PHP 7.2.5
  • WordPress 5.4

Также рекомендуется:

  • Zend OPcache

Docket Cache сохраняет кеш в виде PHP-файлов, поэтому работает как с OPcache, так и без него. С OPcache PHP держит эти файлы наготове в памяти и не читает их с диска при каждой загрузке страницы, благодаря чему кеш работает намного быстрее.

Документация

Параметры настройки, руководства по установке и использование командной строки описаны в документации.

Разработка

  • Репозиторий GitHub — исходный код и центр разработки Docket Cache.
  • Журнал изменений — полная история изменений, исправлений и улучшений.
  • Gapo Tunnel — открывает доступ к локальным сервисам из интернета через защищённые туннели. Пригодится для тестирования Docket Cache в локальной среде разработки.
  • WP Staging Desktop — превращает рабочий сайт WordPress в локальную среду разработки за считаные минуты.

Поддержать проект

Поддержите дальнейшую разработку Docket Cache разовым или регулярным пожертвованием.

Основные спонсоры:

Искренняя благодарность и признательность.

Другие спонсоры упоминаются в почетном списке.

Скриншоты

Установка

Docket Cache требует PHP 7.2.5 или выше и WordPress 5.4 или выше, а для наилучшей производительности — Zend OPcache.

  1. В панели администратора WordPress перейдите в раздел Плагины -> Добавить новый.
  2. Найдите «Docket Cache» и нажмите Установить.
  3. Нажмите Активировать или, если у вас мультисайт, Активировать для сети.
  4. Выберите Docket Cache в меню слева, чтобы открыть страницу настроек.

Подождите несколько секунд, пока Docket Cache начнёт кешировать объекты.

Часто задаваемые вопросы

Что такое объектное кеширование в WordPress?

Объектное кеширование сохраняет результаты запросов к базе данных, чтобы их можно было быстро получить, когда они понадобятся снова.

Кешированные данные выдаются непосредственно из кеша, без повторных запросов к базе данных. Это снижает нагрузку на сервер и ускоряет ваш сайт.

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

Что такое Docket Cache в контексте объектного кеширования?

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

Docket Cache не просто хранит объектный кеш — он преобразует кешированные данные в обычный PHP-код. Это быстрее, потому что WordPress может использовать кеш напрямую, без дополнительной обработки.

Что такое OPcache в Docket Cache?

OPcache — это встроенный в PHP механизм кеширования. Он повышает производительность, сохраняя предварительно скомпилированный байт-код скриптов в общей памяти, поэтому PHP не нужно загружать и разбирать скрипты при каждом запросе.

Docket Cache преобразует объектный кеш в обычный PHP-код. При чтении и записи данных кеша он напрямую использует OPcache, что ускоряет получение данных и повышает производительность.

Что такое служба Cronbot в Docket Cache?

Cronbot — внешняя служба, которая каждый час обращается к вашему сайту, чтобы WordPress Cron работал без перебоев.

Эта служба необязательна и не требуется для работы. По умолчанию она не подключена к серверу конечной точки. Её можно полностью отключить на странице настроек.

Что такое сборщик мусора в Docket Cache?

Сборщик мусора — это запланированное событие, которое запускается каждые 5 минут, чтобы отслеживать файлы кеша, удалять просроченные записи и собирать статистику.

Что такое RAM-диск в Docket Cache?

RAM-диск использует оперативную память вашего сервера (RAM) в качестве накопителя. Это может быть аппаратное устройство или виртуальный диск.

Чтение и запись данных в оперативной памяти выполняются намного быстрее, чем на SSD. Размещение файлов Docket Cache на RAM-диске может значительно повысить производительность.

Обратите внимание: для создания RAM-диска нужен доступ администратора сервера (root), поэтому на виртуальном хостинге этот вариант недоступен.

Пример команды для создания RAM-диска и его использования с Docket Cache:

$ cd wp-content/
$ sudo mount -t tmpfs -o size=500m tmpfs ./cache/docket-cache

Чтобы путь кеша монтировался автоматически при запуске сервера, обновите файл /etc/fstab.

Подробнее о RAM-дисках:

  1. Как легко создать RAM-диск
  2. Что такое /dev/shm и как его использовать на практике
  3. Создание файловой системы в RAM

В Windows создайте RAM-диск и укажите в DOCKET_CACHE_PATH путь к этому RAM-диску.

Какой минимальный объём RAM нужен для виртуального хостинга?

По умолчанию WordPress устанавливает лимит памяти 256 МБ. Вместе с MySQL и веб-сервером требуется больше 256 МБ. Если ваш тариф хостинга предоставляет всего 256 МБ, этого недостаточно, и Docket Cache не сможет повысить производительность вашего сайта.

Чем Docket Cache отличается от других плагинов объектного кеша?

Docket Cache — это ускоритель объектного кеша. Перед сохранением объектного кеша он оптимизирует кеширование, обрабатывая запросы записей, подсчёт комментариев, переводы WordPress и многое другое.

Можно ли использовать его вместе с другими плагинами кеширования?

И да, и нет. Его можно использовать вместе с плагином кеширования страниц, но не с другим плагином объектного кеша.

Можно ли использовать его с LiteSpeed Cache?

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

Можно ли использовать Docket Cache в магазине WooCommerce с высокой нагрузкой?

Не рекомендуется для магазинов WooCommerce с высокой посещаемостью. Docket Cache задуман как файловая альтернатива кешам в оперативной памяти, таким как Redis и Memcached, и может не справиться с нагрузкой загруженного магазина. Для сайтов WooCommerce с большим трафиком мы рекомендуем использовать Redis.

У меня VPS. Можно ли использовать Docket Cache вместо Redis?

Можно, но если ваш VPS поддерживает Redis, для лучшей производительности мы рекомендуем использовать Redis. Docket Cache лучше всего подходит для сред, где Redis или Memcached недоступны. При этом Docket Cache хорошо работает на небольших и средних сайтах на VPS: сетевое подключение не требуется, и нет риска конфликтов ключей кеша.

Отзывы

06.03.2026 1 ответ
After installing this plugin I saw significant speed increases on page loading times. I've used it in combination with other page and browser cache plugins and have had no conflicts.
29.09.2025 1 ответ
Docket Cache hat meine Seiten mit Elementor Pro, LearnPress und PMP deutlich schneller gemacht. Die Datenbankzeit ging praktisch auf null, die Anzahl der Queries wurde stark reduziert, und das Backend fühlt sich viel reaktionsschneller an. Einfach zu installieren, leicht zu konfigurieren und perfekt kompatibel mit WP Rocket und WP Optimize. Absolute Empfehlung!
26.09.2025
Works flawless, really simple way to test object cache locally when developing, without needing to setup memchache or redis or similar.
Посмотреть все 50 отзывов

Участники и разработчики

«Docket Cache — ускоритель кэширования объектов» — проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:

Участники

«Docket Cache — ускоритель кэширования объектов» переведён на 6 языков. Благодарим переводчиков за их работу.

Перевести «Docket Cache — ускоритель кэширования объектов» на ваш язык.

Заинтересованы в разработке?

Посмотрите код, проверьте SVN репозиторий, или подпишитесь на журнал разработки по RSS.

Журнал изменений

26.04.12

  • Added: DOCKET_CACHE_SKIP_UNCHANGED constant and «Skip Unchanged Cache Writes» option to turn it off.
  • Fixed: Command::dropino_update() -> Wrong command in the WP-CLI help example.
  • Fixed: View::parse_log_query() -> Cache View showed «Data Not available» for every cache file.
  • Fixed: Cache Log -> Clicking a row selected a row further down in long logs, and nothing near the end.
  • Fixed: Plugin::register_tweaks() -> WordPress Translation Caching looped until a fatal error with WPML String Translation.
  • Fixed: Plugin::register_tweaks() -> WordPress Translation Caching gave text domains that were not loaded the translations of another domain.
  • Fixed: Filesystem::opcache_compile() -> Cache files rewritten within the same second stayed stale when the host blocks opcache_invalidate() or the write came from WP-CLI.
  • Improved: WP_Object_Cache::dc_save() -> Skip writing unchanged values to reduce OPcache wasted memory.

26.04.11

  • Исправлено: Becache::export_transient() -> Transient возвращались в виде сериализованных строк вместо исходного значения.
  • Исправлено: Becache::export_transient() -> Значение Transient могло заменяться его временем истечения, а просроченные Transient попадали в кеш.
  • Исправлено: Becache::store_cache() -> Экспортированные Transient теперь сохраняют собственный срок действия, а не всегда используют максимальный TTL.
  • Исправлено: WP_Object_Cache::dc_update() -> Сохранённый тип сбрасывается, когда incr/decr записывает новое значение.
  • Улучшено: Becache -> Transient с массивами и stdClass хранятся в виде нативного PHP-кода, объекты других классов десериализуются при чтении.
  • Улучшено: WP_Object_Cache -> Повышена версия формата кеша на диске, чтобы файлы кеша Transient, записанные версией 26.04.10, стали недействительными.

26.04.10

  • Исправлено: WP_Object_Cache::dc_get()/dc_save() -> Кешированные строки возвращаются точно в том виде, в каком были сохранены, чтобы предотвратить внедрение объектов PHP через значения, похожие на сериализованные.
  • Исправлено: WP_Object_Cache::dc_get() -> Проверка сохранённого ключа и группы перед выдачей кешированного значения.
  • Исправлено: CliOpcache -> Общий секретный ключ WP-CLI OPcache хранится в PHP-файле, а не в доступном из веба файле блокировки.
  • Исправлено: Plugin::flush_fcache() -> Проверка индекса файла кеша для защиты от обхода пути (path traversal).
  • Исправлено: ReqAction -> Изменение состояния «Приостановить объектный кеш» перенесено в действие с проверкой nonce.
  • Исправлено: View::code_focus() -> Уведомление в админ-панели формируется через текстовый узел, а ключ параметра ограничивается, чтобы предотвратить XSS на основе DOM.
  • Исправлено: WpConfig::write_runtime() -> В runtime.php записываются только ожидаемые значения: on/off и целые числа.
  • Исправлено: Crawler -> Файлы cookie прикрепляются только к петлевым запросам и никогда — к удалённой конечной точке Cronbot.
  • Исправлено: CronAgent::close_ping() -> Перехваченный вывод Hook событий cron исключается из ответа на Ping.
  • Исправлено: EventList -> Экранирование аргументов событий cron и имён функций обратного вызова в таблице Cronbot.
  • Исправлено: Tweaks -> HTTP-ответы кешируются только для GET-запросов без заголовков Authorization и Cookie, а ответы, которые устанавливают cookie, никогда не кешируются.
  • Исправлено: MenuCache -> Общий кеш меню не используется для авторизованных пользователей.
  • Улучшено: WP_Object_Cache -> Благодаря версии формата кеша на диске файлы кеша, созданные до обновления, переносятся в новый формат при чтении, без ручной очистки.

26.04.09

  • Добавлено: Cronbot -> Уведомление о спонсорстве при подключении службы.
  • Исправлено: nwdcx_cleanuptransient() -> При удалении Transient из базы данных используются подготовленные запросы.
  • Исправлено: Crawler -> Проверка SSL-сертификата при запросах к удалённым конечным точкам.
  • Исправлено: ReqAction -> Экранирование сообщения об ошибке Cronbot в уведомлении админ-панели.
  • Удалено: Проверка критических версий -> Больше не требуется.

26.04.08

  • Исправлено: WP_Object_Cache::dc_log() -> Значения строки запроса скрываются в URI запроса, который записывается в журнал.
  • Исправлено: Constans -> Имя файла журнала кеша по умолчанию больше нельзя предугадать.
  • Исправлено: Filesystem::log_remove_legacy() -> Удаление файлов журнала кеша, оставшихся под старым именем.
  • Исправлено: CronAgent::close_ping() -> Фатальная ошибка при отклонённом запросе Ping.
  • Исправлено: CronAgent::close_ping() -> Заголовки Cookie и Authorization исключаются из сохраняемых данных Ping.

26.04.07

  • Исправлено: Заглушка Polyfill PhpToken -> Теперь расширяет класс Nawawi\Symfony\Polyfill\Php80\PhpToken с изолированным пространством имён.
  • Улучшено: обновлены сторонние библиотеки Symfony для совместимости с PHP 8.4.

26.04.06

  • Исправлено: admin/log.php -> esc_textarea() для вывода журнала кеша, чтобы предотвратить хранимую XSS.
  • Исправлено: Plugin::dc_log() -> Очистка значения REQUEST_URI вызывающей стороны перед записью в журнал.
  • Исправлено: Plugin -> Проверка прав доступа при скачивании log/debug.log, которое было доступно без аутентификации на этапе ‘init’.

26.04.05

  • Исправлено: удалён двойной echo в log.php.

26.04.04

  • Добавлено: переключатель «Инвалидация OPcache после WP-CLI» в интерфейсе настроек (аналог константы DOCKET_CACHE_WPCLI_OPCACHE).
  • Исправлено: CliOpcache::notify() -> Уведомления по отдельным файлам буферизуются до завершения работы (shutdown), чтобы предотвратить шквал HTTP-запросов во время GC и удаления отдельных файлов кеша.
  • Исправлено: CliOpcache -> Маршрут REST регистрируется до проверки совместимости, чтобы исключить лишние ошибки 404, когда рабочие процессы досрочно завершаются под нагрузкой.
  • Исправлено: CronAgent::receive_ping() -> Проверка типов входных данных Ping, чтобы предотвратить TypeError в PHP 8 из-за значений в виде массива.
  • Исправлено: CronAgent::receive_ping() -> Явный return после close_ping(), когда CRONBOT отключён.
  • Исправлено: CronAgent::receive_ping() -> Цикл по сайтам мультисайта изолирует ошибки отдельных сайтов с помощью try/catch; передаётся wpcron_error, чтобы сервер Cronbot обнаруживал постоянные сбои.
  • Исправлено: CronAgent::run_wpcron() -> Защита от повторного входа с помощью флага экземпляра и try/finally.
  • Исправлено: CronAgent::run_wpcron() -> Вызов ob_end_clean() при исключении; значение $run_event больше не уменьшается ниже нуля.
  • Исправлено: CronAgent::run_wpcron() -> Предварительная инициализация $results и $cron_event, чтобы устранить предупреждения PHP 8 о неопределённых переменных.
  • Исправлено: CronAgent::run_wpcron() -> Проверка REQUEST_URI использует urldecode() и сначала проверяет wp_doing_cron(), чтобы исключить обход через URL-кодирование.
  • Исправлено: CronAgent::send_action() -> Ключ кеша включает действие, чтобы избежать конфликта между вызовами on/off с одного IP.
  • Улучшено: CronAgent::send_action() -> Параметр сброса кеша $stmp обновляется каждые 5 минут, чтобы избежать устаревших данных CDN в длительных процессах.
  • Улучшено: CronAgent::check_connection() -> Пропуск при запросах AJAX/REST/cron, чтобы снизить накладные расходы Hook shutdown на высоконагруженных конечных точках.

26.04.03

  • Добавлено: CliOpcache — инвалидация OPcache веб-сервера из WP-CLI через конечную точку REST.
  • Добавлено: константа DOCKET_CACHE_WPCLI_OPCACHE для включения/отключения инвалидации OPcache из CLI.
  • Добавлено: константа DOCKET_CACHE_CONFIGACTION для включения/отключения функции экспорта/импорта настроек.
  • Добавлено: функция экспорта/импорта настроек для резервного копирования и восстановления конфигурации.
  • Исправлено: CliOpcache -> Защита от обхода пути с помощью проверки realpath().
  • Исправлено: CliOpcache -> Подавление уведомлений при массовой очистке, чтобы избежать лишних HTTP-запросов во время полной очистки кеша.
  • Исправлено: CliOpcache -> Общий секретный ключ инициализируется при регистрации маршрута REST.
  • Исправлено: ReqAction -> Действие «Очистить объектный кеш» вызывало ошибку nginx 502; теперь очистка откладывается до отправки ответа.
  • Исправлено: Plugin::get_opcache_status() -> Фильтрация скриптов по ABSPATH, чтобы не учитывать другие сайты на виртуальном хостинге.
  • Исправлено: Plugin::get_opcache_status() -> Удалена лишняя проверка устаревания через is_file() для каждого кешированного скрипта.
  • Исправлено: Просмотр OPcache -> Экранирование выводимых значений конфигурации для предотвращения XSS.
  • Улучшено: Filesystem::unlink() -> Уведомление OPcache веб-сервера при удалении отдельного файла кеша.
  • Улучшено: Filesystem::cachedir_flush() -> Для внутренних HTTP-запросов используется класс Crawler.
  • Улучшено: Plugin::get_opcache_status() -> Массив скриптов не формируется для страницы обзора, для OPcacheView действует ограничение в 50000.
  • Улучшено: Plugin::get_opcache_status() -> Ограничение времени сканирования файлового кеша на виртуальном хостинге.
  • Улучшено: OPcacheView -> Удалён вариант «Все элементы», вместо него действует ограничение в 50000 элементов.
  • Улучшено: OPcacheView::get_status() -> Результат кешируется, чтобы избежать двойного сканирования при загрузке страницы.

Предыдущие изменения см. в файле changelog.txt.

Если во время обновления возникла ошибка, удалите вручную wp-content/object-cache.php и wp-content/cache/docket-cache. Спасибо.