浏览器解析未闭合标签时并非变慢,而是被迫重走整条插入算法路径:维护开放元素栈,遇非法上下文即弹栈、隐式闭合、重排并插入新节点,该过程不可跳过、不缓存状态;实测8层未闭合使Chrome解析耗时从12ms升至47ms。

浏览器解析未闭合标签时到底多费劲
它不是“慢一点”,而是被迫重走整条插入算法路径。HTML 解析器维护一个开放元素栈(open element stack),每遇到一个未闭合的 <div>、<code><p></p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/xiazai/skill12116" title="DeepBI DHTML 页面生成器"><img
src="https://img.php.cn/upload/skill/001/246/273/6adaf20d3191a227.jpg" alt="DeepBI DHTML 页面生成器" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/xiazai/skill12116" title="DeepBI DHTML 页面生成器">DeepBI DHTML 页面生成器</a>
<p>生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力:
- 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面;
- 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”;
- 提及位于 `apps/console/src/featur</p>
</div>
<a href="/xiazai/skill12116" title="DeepBI DHTML 页面生成器" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div> 或 <section></section>,就往栈里压一层;当后续出现本不该出现在该上下文的标签(比如 <div> 出现在 <code><p></p> 里),解析器必须一边弹栈一边隐式闭合、重排、插入新节点——这个过程无法跳过,且不缓存中间状态。
实测数据:一个漏掉


















