MathJax - Оптимизация производительности на множественных наборах
Я пытаюсь реализовать частичный рендеринг в моем редакторе Markdown, преобразовывая Markdown/Tex только в измененные абзацы. Так что в основном у меня есть #preview
элемент, который содержит несколько .preview_section
элементы, содержащие сами преобразованные абзацы HTML. Когда я обновляю один или несколько .preview_section
элемент, я бы хотел, чтобы MathJax обрабатывал только эти элементы.
Я пробовал разные подходы:
- Передать список модифицированных
.preview_section
элементы как параметр набора текста. Это худшее решение с точки зрения производительности. При прохождении более 1 элемента время визуализации почти умножается на количество элементов. - Пройти
#preview
элемент как набранный параметр. Проблема с этим решением состоит в том, что MathJax снова рендерит уже отрендеренныйscript[type="math/tex; mode=display"]
, Я пытался установить tex2jaxignoreClass: "tex2jax_ignore"
Конфигурация и добавить.tex2jax_ignore
как неизмененным.preview_section
элементы и уже оказанныеscript
элементы, но это не имеет никакого эффекта, так как он не обрабатывается препроцессором tex2jax (я полагаю). - Пройти
#preview
элемент в качестве параметра typeset, но после удаления всехscript[type="math/tex; mode=display"]
из предварительного просмотра. Это наиболее эффективно, но мне не очень нравится удалять эти сценарии из предварительного просмотра.
Есть ли способы сказать MathJax не обрабатывать те script
элементы? Или любые идеи, прежде чем я погрузиться в исходный код... Спасибо.
1 ответ
Хорошо, я только что нашел свою проблему. MathJax хранит объект JavaScript в каждом script[type="math/tex"]
элемент в DOM. Этот объект, на самом деле хранится в element.MathJax
, содержит:
checked: 1
elementJax: Object
preview: span.MathJax_Preview
startNumber: 0
state: 2
где state
состояние предварительного просмотра (2 означает ОБРАБОТАНО). Таким образом, TypeSet не отображает предварительный просмотр снова, если он уже был отображен, если только вы не переписали тег script в DOM (это то, что я делал), в этом случае вы теряете объект MathJax и состояние предварительного просмотра. Вот почему MathJax продолжал перерисовывать все мои скрипты.