Оптимизированный / более быстрый анализ викитекста в расширении Mediawiki?

В настоящее время я работаю над расширением Mediawiki, которое должно анализировать вики-текст на странице. В настоящее время я использую Parser::preprocess. Это добавляет несколько секунд к времени загрузки страницы.

Есть ли более быстрый способ сделать это? В частности, он должен анализировать вики-текст, раскрывать все шаблоны и функции синтаксического анализатора и проверять конкретные строки в результате.

1 ответ

Синтаксический анализ - это не та операция, которую можно ожидать, что она будет быстрой; Вы должны спроектировать свое расширение таким образом, чтобы его анализ происходил только при изменении вики-текста страницы (или некоторых его зависимостей) - т.е. интегрировать любую логику в один из анализаторов, например InternalParseBeforeSanitize и сохранить результаты.

Обычно вы бы использовали page_props таблица для этого (ср. ParserOutput::setProperty) но если это связано с безопасностью, вы должны тщательно продумать, работает ли это для вас (это для каждой страницы, а не для каждой ревизии, и между страницей и таблицей реквизитов обновляется небольшое окно). В будущей версии MediaWiki вы сможете хранить произвольные метаданные для каждой ревизии в виртуальных слотах MCR; сейчас вы должны реализовать его с нуля, в своей таблице, в расширении. Или вы всегда можете сделать небольшое кэширование, если считаете, что задержка допустима на редко просматриваемых страницах (используйте ObjectCache::getMainWANInstance() чтобы получить WANObjectCache экземпляр и использовать его getWithSetCallback метод).

Другие вопросы по тегам