存储¶
概览¶
在网络进程中,WebStorage 数据由 WebKit::StorageManager 类管理。每个 StorageManager 拥有一或多个 StorageNameSpace,每个 StorageNamespace 拥有一或多个 StorageArea。每个 StorageArea 对应一个存储映射(一个 localStorage 或 sessionStorage 对象),后端可以是 SQLite 数据库或内存映射。现在我们有了 NetworkStorageManager,它按源(origin)管理存储。我们可以将 StorageManager 与 NetworkStorageManager 合并,因为 localStorage 和 sessionStorage 不在不同源之间共享。
层级结构¶
- NetworkStorageManager(管理会话的存储,拥有一或多个 OriginStorageManager)
- OriginStorageManager(管理源的存储,拥有一或一个 LocalStorageManager 和一个 SessionStorageManager)
- LocalStorageManager / SessionStorageManager(管理 LocalStorage 和 SessionStorage,拥有一或多个 StorageAreaBase)
- MemoryStorageArea / SQLiteStorageArea(继承自 StorageAreaBase;管理一个本地或会话存储,类似于 Webkit::StorageArea)
备注¶
StorageNamespace 层已被移除。对于 SessionStorage,不同的 StorageNamespace 意味着不同的网页,同一源在不同页面上可以有不同的 sessionStorages,因此我们在 SessionStorageManager 中保留了一个 StorageNamespace <=> StorageArea 映射。对于 LocalStorage,不同的 StorageNamespace 意味着不同的页面组。我们最初的计划是同一源在不同页面组中可以有不同的 localStorages,但我们旧的实现实际上使所有页面组都指向同一个数据库文件。为了保留现有行为,即所有相同源的页面组共享存储,我们现在为每个 LocalStorageManager 保留一个本地 StorageArea 和一个瞬时 StorageArea。