HTML有一个顽固的规则,悄悄塑造了前端架构十年:它按到达顺序渲染。如果你的页面第三部分需要慢速数据库查询,它后面的所有内容都要等待。常见的逃生通道都是妥协:缓冲整个响应并完全放弃流式传输,用CSS重新排序却破坏无障碍树,或者引入一个框架,其主要工作就是把服务器延迟变成客户端旋转加载图标。
Chrome 148带来了一个实验性答案,绕过了这三种妥协。在“声明式局部更新”(Declarative Partial Updates)的总称下,两个相关API让服务器可以先发送占位符,稍后再填充内容;同时让JavaScript可以将标记流式注入元素,而无需等待完整字符串。目前这些功能位于 chrome://flags/#enable-experimental-web-platform-features 标志后面,npm上已有polyfill,其他浏览器厂商也传出积极信号。
![]()
声明式部分:处理指令的复活
声明式这一半复活了HTML在其整个生命周期中一直忽略的东西:处理指令。在XML中,它们携带元数据;在HTML中,它们一直被解析为注释并被丢弃。新API给了它们一个任务。
欢迎回来,Dan。
当解析器到达 时,它会找到匹配的 并将自己的内容替换进去。最终得到的DOM中不包含marker和template,只有那个段落。服务器在等待用户查询时,不必再扣住文档的其余部分。
范围形式:免费获得加载状态
还有一种范围形式,这是你最常会用到的,因为它免费提供了加载状态:
- 加载中…
和 之间的所有内容会立即渲染,并在模板出现时被替换。更好的是,模板可以重新发出一个marker,这将其变成了追加循环。随着查询产生结果,每行流式传输一个 ,每个以 结尾,列表就会原地增长。无需appendChild,无需框架,无需任何客户端JavaScript。
作用域规则:重要的限制
作用域规则是重要的限制: 只能修补其自身父元素内部的marker。这是有意为之,意味着放入 的模板可以覆盖整个文档,包括 。在从用户输入生成模板之前,这一点值得了解。
第二部分:混乱的HTML插入API
第二部分解决了一个我们大多数人已经不再注意的混乱局面。诚实地问自己:innerHTML、setHTML、setHTMLUnsafe、insertAdjacentHTML和createContextualFragment中,哪些会清理输入,哪些会执行
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.