Skip to content
目录

14 — FrameTree 与其他核心设计

这一篇只保留几个容易追问的对象模型:FrameTree、RenderFrameHost、BFCache、Prerender、viz。

FrameTree

一个页面可能包含主 frame、iframe、跨进程 iframe 等结构。Chrome 在浏览器进程侧用 FrameTree 描述这些 frame 关系。

常见对象:

  • WebContents:大致对应一个标签页。
  • FrameTreeNode:表示 frame 结构中的一个节点。
  • RenderFrameHost:表示某个 frame 当前关联的渲染端实体。

导航时,FrameTreeNode 可以保持不变,但 RenderFrameHost 可能切换。

OOPIF

OOPIF 是 out-of-process iframe。跨站 iframe 可以放到另一个 Renderer 进程中,但视觉上仍嵌入在同一个页面里。

渲染上,每个进程可以产生自己的 CompositorFrame,最后由 viz 聚合。

BFCache

BFCache 是 back-forward cache。离开页面时,页面不一定立刻销毁,而是可能被冻结保存;用户返回时可以快速恢复。

它提升返回体验,但也改变了生命周期假设:页面离开后可能仍然存在,不能简单认为导航就等于销毁。

Prerender

Prerender 会提前在后台准备页面,等用户真的访问时再激活。它同样要求浏览器区分当前展示页面和非激活页面。

RenderDocument

RenderDocument 的方向是让导航更倾向于创建新的 RenderFrameHost,减少旧文档状态复用带来的复杂性和安全风险。

总结

FrameTree 描述页面 frame 结构,RenderFrameHost 描述具体渲染实体。OOPIF 让跨站 iframe 跨进程,BFCache 和 Prerender 让一个 WebContents 中可能存在非当前激活页面,所有这些都要求 Chrome 精细管理文档生命周期。

MIT License.