2013-07-26 1 views
1

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

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

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

+0

У меня такая же проблема. Я могу использовать только некоторые внешние файлы javascript для mathjax, и очень сложно настроить предварительный просмотр. Я использую код chatjax. Вот мой jsfiddle: http://jsfiddle.net/Zky72/71/ Знаете ли вы, можно ли использовать chatjax, чтобы предварительный просмотр был приятным? – Kasper

+0

вы можете просто вызвать 'MathJax.Hub.Queue ([" Typet ", MathJax.Hub, element]);' для каждого элемента, который необходимо обновить ...? –

+0

Это первый подход, но он довольно медленный. – benweet

Смежные вопросы