【发布时间】:2016-11-19 16:25:48
【问题描述】:
我有一个要填充为请求的 HTML 流的元素,而不是等待完整的响应。事实证明,这非常困难。
我尝试过的事情:
1。 milestoneNode.insertAdjacentHTML('beforebegin', text)
如果这行得通,那就可爱吧。不幸的是,具有古怪解析的元素破坏了它——例如<p> 和<table>。生成的 DOM 可以被描述为 Dada。
2。使用虚拟 DOM/DOM 更新管理库
Google 的incremental-dom 似乎最有希望,但它的patch() 操作总是从容器节点的开头重新启动。不知道如何将其“冻结”到位。
这也带来了至少在 JavaScript 中进行 HTML 标记化的包袱,并且 一些 必须进行实际的树构建,除非提供格式良好的 XHTML5。 (没有人这样做。)重新实现 浏览器的 HTML 解析器似乎是我大错特错的迹象。
3。 document.write()
我很绝望。具有讽刺意味的是,这个古老的妖怪几乎具有我需要的行为,没有“丢弃现有页面”的事情。
4。附加到一个字符串,然后定期innerHTMLing
打败了流式传输的要点,因为最终整个响应都保存在内存中。也有重复的序列化开销。
从好的方面来说,它确实有效。但肯定有更好的方法吗?
【问题讨论】:
-
" as a request's HTML streams in" 当前如何发送和接收流?
-
@guest271314 作为真正的 Service Worker 流,用
postMessage()吐到页面上
标签: javascript html dom streaming service-worker