更新日期:2026.5.1
时隔将近一个月,我终于更新网站了。这也意味着机器已经快一个月没有重启了,我正在打算设定一个一周一次的定时重启任务。 顺便这篇文章是在CV的课上写的。
趁着图形学课的作业的机会,我也是(被逼着)略微学习了一些浏览器相关的入门知识。我原以为我是不可能碰任何浏览器前端相关的东西的,这一部分也是因为JavaScript的手感稀碎名声远扬。这次动手写了一点之后发现,嗯,确实稀碎。不过好在有TypeScript可以写,TypeScript确实是一个好语言。在我心里ts的手感排名已经要比py高出一大截了。
这件事的好处在于,我可以把这些粗浅的知识用在更新这个网站上。虽然Astro目前看起来要复杂一点(比如它会构建新文件然后把相对索引搞乱),但我已经成功把图形学的作业放了上来。链接在这里。
我原本确实没有HTML语言的“求值->显示内容”的流程的概念。这个过程确实不是显然的。按照一般的编程语言的方式来理解的话,HTML的Parser会把语言解析成一个叫做DOM树的东西。或许这个东西可以被理解成某种IR(或者更直接地,AST)。浏览器的渲染引擎会通过DOM树来渲染页面的内容。
这里有一个点值得确认。是谁在制定HTML和DOM树渲染的标准?Well,这个问题的答案有些显然。最大的利益相关者在制定这些标准。浏览器技术确实是一个相当能够赚钱的领域,这也让厂商有巨大的动力去迭代标准。不过反过来说,除了谷歌苹果和Mozilla(还有微软?虽然IE已经被抛弃了)这些厂商之外,也确实没有组织在开发拥有大量用户的浏览器引擎了。 HTML虽然不太像一个典型的编程语言,但是用一个语言赚走了最多钱的人控制这个语言,应该是一件比较少见的事。
JavaScript和页面的交互也不是显然的。它实际通过DOM树暴露的API与DOM产生交互,进而影响渲染结果。
这里得提一下WebAssembly。wasm并不能直接与DOM树产生交互。它必须介由JS来操作 DOM元素。这也给wasm带来了能力边界。重交互内容会相当程度地影响它的性能。
JavaScript也是一个可怜的孩子,名字的版权被可恶的甲骨文公司握在手里,害得标准文档的名字都得叫做ECMAScript。
在稍微了解了一点浏览器究竟是什么之后,我开始理解为什么基于浏览器技术的应用会大行其道。毕竟,浏览器就是一个标准,或者说大轮子。例如,浏览器已经负责了核心的渲染步骤,只需要写一些简单的css文件就可以做出漂亮的用户界面了。直接调用这些轮子就可以省下大量的事件去干别的事,为什么不这么做呢。