返回技术文章

为什么公式要在构建期渲染

  • Astro
  • KaTeX
  • 性能

把 LaTeX 公式搬上网页有两条路:浏览器端渲染,或者构建期渲染。 这个站点选了后者,理由是首屏体验。

两条路的区别

浏览器端渲染的做法是:HTML 里先放 $E=mc^2$ 的原文, 加载完 KaTeX 的 JS 之后再把它替换成排版好的公式。

构建期渲染则在打包时就把公式转成 HTML 标记,浏览器拿到的就是最终结果。

浏览器端渲染构建期渲染
首屏公式先闪一下原文直接是最终效果
JS 体积需要 KaTeX 运行时不需要
构建耗时稍慢
无 JS 环境公式显示为原文正常显示

闪一下有多难受

公式密集的文章里,「先看到一堆美元符号和反斜杠,再突然变成公式」这个过程 在慢网络上会持续好几百毫秒。阅读节奏被打断,而且滚动位置会跳。

构建期渲染没有这个问题,因为页面到达时公式就已经是最终形态了。

代价是什么

构建时间会变长,而且公式写错时问题会暴露在构建阶段。 这其实是好事——总比上线之后读者看到一堆红色报错要好。

一个常见的坑是转义。反斜杠在 Markdown 与 LaTeX 里都是特殊字符, 矩阵换行要写成 \\

(abcd)\begin{pmatrix} a & b \\ c & d \end{pmatrix}

只需要 CSS

构建期渲染之后,浏览器端唯一需要的只有 KaTeX 的 CSS (字体与排版尺寸),而这份 CSS 只在详情页加载—— 首页的卡片列表和文章摘要里没有公式,不需要为它付出体积代价。