MathJax - Оптимизация производительности на множественных наборах

Я пытаюсь реализовать частичный рендеринг в моем редакторе Markdown, преобразовывая Markdown/Tex только в измененные абзацы. Так что в основном у меня есть #preview элемент, который содержит несколько .preview_section элементы, содержащие сами преобразованные абзацы HTML. Когда я обновляю один или несколько .preview_section элемент, я бы хотел, чтобы MathJax обрабатывал только эти элементы.

Я пробовал разные подходы:

  • Передать список модифицированных .preview_section элементы как параметр набора текста. Это худшее решение с точки зрения производительности. При прохождении более 1 элемента время визуализации почти умножается на количество элементов.
  • Пройти #preview элемент как набранный параметр. Проблема с этим решением состоит в том, что MathJax снова рендерит уже отрендеренный script[type="math/tex; mode=display"], Я пытался установить tex2jax ignoreClass: "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 продолжал перерисовывать все мои скрипты.

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