Содержание

Кэширование

«ДокуВики» ускоряет просмотр статей с помощью кэширования разобранных файлов1). Если существует актуальная скэшированная версия документа, то будет доставлена именно эта скэшированная копия вместо того, чтобы разбирать все данные заново. При редактировании и предпросмотре никакого кэширования не применяется.

Очистка кэша

Для принудительной очистки кэша отдельной статьи добавьте к её URL параметр purge. Например:

http://www.example.com/namespace/page?purge=true

Для принудительной очистки кэша всех статей, включая страницы инструкций, примените команду touch к локальному файлу конфигурации conf/local.php2).

Для принудительной очистки кэша только xhtml-страниц, примените touch к inc/parser/xhtml.php.

Двухстадийное кэширование

«ДокуВики» использует два файла кэша для каждой статьи. Для того, чтобы понять это, вы должны знать, что статья до того, как быть отображенной в XHTML, сначала разбирается в промежуточный формат инструкций. «ДокуВики» сохраняет в кэше оба представления — и инструкции и подготовленный XHTML.

Размещение

Кэши XHTML и инструкций располагаются в директориях data/cache/*6). Файлы завершаются суффиксами .xhtml, .i. В директории кэша также хранятся и другие файлы:

Плагины

Плагины теперь могут влиять на кэш через событие PARSER_CACHE_USE. Это позволяет плагинам, которые вносят дополнительные зависимости в определённые статьи, проверить эти зависимости и принудить «ДокуВики» обновить статью, если эти зависимости нарушены.

Замечание разработчику

До сих пор единственную возможность, которую имел разработчик для отключения кэширования, — это отключить его полностью. Это было необходимо для таких плагинов как «Discussion» и «Include».

Для того, чтобы использовать новую функциональность, синтаксические плагины должны:

Сам кэш управляется с помощью кэширующего объекта7). Основными частями этого объекта интересными для плагина являются:

Индивидуальной очистка кэша отдельной статьи

Как описано выше, «ДокуВики» проверяет валидность кэша, а не активно сбрасывает кэш. Однако, xhtml-представление статьи зависит от метаданных. То есть, если файл метаданных более свежий, чем кэш, «ДокуВики» определит, что кэш невалиден, и перерендерит (пересоздаст) статью. Таким образом, мы можем обновить метаданные для того, чтобы сбросить кэш.

/* code to expire the cached xhtml of page ns:page
 * $id = 'ns:page';
 * $data = array('cache' => 'expire');  // the metadata being added
 * $render = false;                     // no need to re-render metadata now
 * $persistent = false;                 // this change doesn't need to persist passed the next metadata render.
 */
p_set_metadata($id, $data, $render, $persistent);
1)
По поводу кэширования изображений см. статью «Работа с изображениями и медиафайлами».
2)
Не-UNIX-овые пользователи могут просто открыть этот файл и сохранить его заново — смысл состоит в том, чтобы изменить метку времени изменения файла.
3)
conf/dokuwiki.php и conf/local.php.
4)
inc/parser/parser.php и inc/parser/handler.php/
5)
inc/parser/xhtml & inc/parser/metadata
6)
где * — односимвольное название директории, а data — настраивается в опции «savedir»
7)
inc/cache.php