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