MathJax - 优化多个排版的性能

时间:2013-07-26 00:41:29

标签: markdown mathjax wmd wmd-editor pagedown

我正在尝试通过仅在修改的段落中转换Markdown / Tex来在my Markdown editor中实现部分渲染。 基本上,我有一个#preview元素,其中包含多个.preview_section元素,这些元素包含转换后的HTML段落。当我更新一个或多个.preview_section元素时,我希望MathJax只处理这些元素。

我尝试了不同的方法:

  • 将修改后的.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 个答案:

答案 0 :(得分:1)

好的,我刚刚发现了我的问题。 MathJax将JavaScript对象存储在DOM中的每个script[type="math/tex"]元素中。该对象实际存储在element.MathJax中,包含:

checked: 1
elementJax: Object
preview: span.MathJax_Preview
startNumber: 0
state: 2

其中state是预览的状态(2表示已处理)。因此,如果已经渲染了TypeSet,则TypeSet不再渲染预览,除非您重写DOM中的脚本标记(这就是我正在做的事情),这种情况下您将丢失MathJax对象和预览的状态。这就是MathJax继续重新渲染我所有脚本的原因。