【问题标题】:MathJax - Optimize performance on multiple typesetMathJax - 优化多种排版的性能
【发布时间】:2013-07-26 02:50:38
【问题描述】:

我正在尝试通过仅在修改后的段落中转换 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 元素?或者在我投入源代码之前的任何想法......谢谢。

【问题讨论】:

    标签: markdown mathjax wmd wmd-editor pagedown


    【解决方案1】:

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

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

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

    【讨论】:

    • 我也有同样的问题。我只能为 mathjax 使用一些外部 javascript 文件,而且很难调整预览。我正在使用chatjax 代码。这是我的 jsfiddle:jsfiddle.net/Zky72/71 你知道是否可以使用 chatjax 来很好地预览?
    • 您可以为每个需要更新的元素调用MathJax.Hub.Queue(["Typeset", MathJax.Hub, element]);...?
    • 这是第一种方法,但是速度很慢。
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多