@fluidframework/driver-web-cache (英语)
该套方案提供了执行《公约》和 IPersistedCache 界面。 此缓存启用
在用户的机器上存储用户内容,以便在打开同一流体时提供更快的启动体验
集装箱不止一次。 此执行依赖于索引db,所以它只打算用于浏览器
上下文.
使用 Fluid 框架库
对于依赖流体框架库的公共API,我们建议 ^ (caret)版本范围.
例如,使用 ^1.3.4。 。 。 .
依赖不稳定的API,例如: beta API,我们推荐一个更具限制性的版本范围.
例如,使用一个 ~ 版本范围.
安装
运行此命令以安装软件包 :
npm i @fluidframework/driver-web-cache
从此软件包导入
此软件包使用 packet.json 导出 通过支持级别将API分离. 有关支助保障的信息改为: API 支持级别。 。 。 .
导入 public API 从 @fluidframework/driver-web-cache。 。 。 .
导入 legacy API 从 @fluidframework/driver-web-cache/legacy。 。 。 .
API 文档
读取 @fluidframework/driver-web-cache (英语) API 文档 https://fluidframework.com/docs/apis/driver-web-cache 页面存档备份,存于互联网档案馆。 。 。 .
使用量
import { FluidCache } from "@fluidframework/driver-web-cache";
new FluidCache({
partitionKey: userId,
logger,
maxCacheItemAge,
});
参数
partitionKey- 用于确定缓存的分区正在使用中,并且可以防止多个用户在 同一机器从共享快照缓存。 如果您绝对知道用户不会共享缓存, 也可以设置为null。目前是可选的,但提议在下一次大碰头时需要. 建议使用此键来区分缓存数据的用户.logger- 可选择性地执行伐木合同,其中可记录诊断数据.maxCacheItemAge- 缓存追踪每个条目的时间戳。 此旗帜指定了最大年龄( 毫秒) 用于缓存条目。 此旗帜不能控制缓存内容被删除时, 因为不同的情况以及 对于同一数据,应用程序可能有不同的停滞阈值.
原子最新情况update(中文(简体) )
FluidCache 暴露一个 update 用于执行原子读取-修改-写作的方法。 现取者
值是读取的,更新器的回调则在单个索引数据库内决定是否以及写什么
readwrite 交易。 这使得所有消费者的语义一致更新
基础索引 DB 实例(例如多个浏览器标签竞相持续下线等待状态).
// Conditional overwrite (active tab wins): only write if our revision is higher.
const wrote = await fluidCache.update(entry, (existing, set) => {
const existingRev = (existing as { rev?: number } | undefined)?.rev ?? -1;
if (mine.rev > existingRev) {
set(mine);
}
});
// Read-modify-write: increment a counter atomically.
await fluidCache.update(entry, (existing, set) => {
const prev = (existing as { count: number } | undefined)?.count ?? 0;
set({ count: prev + 1 });
});
这个 updater 引用回调 (existing, set)。 。 。 . existing 实值 undefined 当缓存
线条是隐形的 get —— 即不存在密钥的条目, 现有条目属于
不同的分区,或者现有条目比 maxCacheItemAge写作,打电话
set(value); 不动缓存, 不拨号返回 set。 。 。 .
通话 set(undefined) 删除键上的行(相当于 removeEntry 里面一样
原子交易). get 已崩溃“ 无条目” 和“ 未定义存储的条目”
可见的结果,所以在未定义的语义上删除给呼叫者一个原子条件删除
对于任何有意义的使用案例,都不得含糊不清.
更新器本身必须是同步的 set 必须从里面调用。 索引数据库
交易自动关闭任何非IDB等待,这将静悄悄地打破导致
更新正确。 两名警卫大叫而不是沉默: set 更新器后
已返回丢出 UsageError 在呼叫地点(因此推迟)set 喜欢引用它的模式
从a setTimeout ; 返回一个可处理文件——例如,宣布更新程序
async ——在更新器返回后检测出,中止交易,并在下方登录
FluidCacheUpdateCallbackError。如果更新器调用 set 不止一次,最后一个值获胜.
如果更新器抛出——包括拨打后 set - 交易已中止,且已存在
行被保留.
何时 set 被称作,写(或删除)在解剖上取代键上存在的任意行,
包括更新者认为的横分行或斜行 undefined (比对无条件
覆盖行为 put) (中文(简体) ). 必须保留分行的呼叫者不应使用
update。 。 。 .
update 返回时 true 若为 set 曾被召唤,而作过文 false 若为
更新器未拨号即返回 set,丢出,或发生美洲开发银行错误.
比较和设置的呼叫者 : 页:1 false 返回崩溃三种不同的结果——更新器
返回时不打电话 set (一个失落的种族),被丢弃的更新器(包括aync-update器被误用)
),而美洲开发银行的写作本身也失败了。 需要区分的呼叫者必须咨询
遥测: 更新器- 侧失败日志 FluidCacheUpdateCallbackError; IDB- write 失败日志
下级 FluidCachePutError。丢失的比较赛和赛跑没有记录.
清除缓存条目
当任何流体内容被装入启用的 Web 缓存时, 将会安排一个任务来清除所有的“ stale” 缓存
条目。 这项任务安排在 setIdleCallback 浏览器 API. 我们定义 Stale 缓存项为任何缓存
过去4周内没有使用(读取或写入)的条目。 缓存已清除所有 stale 缓存
与所有文档相对应的条目,而不仅仅是正在装入的流体文档.
这个 deleteFluidCacheIndexDbInstance API 应用程序可用于清除快照的全部内容
随时缓存 。 我们建议在用户明确签名时给这个API打电话. 托管应用程序
确保负责任地使用快照缓存能力,以满足任何相关的需要
客户承诺,如酌情清理储存或在某些情况下断裂快取,
例如,当知道时,用户会被登录在公共计算机上.
import { deleteFluidCacheIndexDbInstance } from "@fluidframework/driver-web-cache";
// We put a catch here because Firefox Incognito will throw an error here. This is why we claim this method is a "best effort", since sometimes the browser won't let us access storage
deleteFluidCacheIndexDbInstance().catch(() => {});
客户最低要求
Fluid框架客户端库支持此文档中的平台. 这些要求有意具有限制性. 在一个主要的版本系列中,我们可以放松这些要求,但我们不能使其更严格. 对于长期支持(LTS)版本,我们可能需要支持这些平台几年.
其他配置可以奏效,但Fluid框架不支持. 如果一个不支持的配置停止工作, 我们不会将此归类为错误 . 要请求支持未列出的配置, 请存档 . 产品组会评估你的要求. 在此问题上,请具体说明配置的现状:
- 配置有效但需要官方支持.
- 配置不起作用,需要更改.
支持的运行时间
- Fluid框架支持节点.js版本22和24同时收到 上游支助。 。 。 .
- 流体框架将停止支持第22版 当上游支持于2027-04-30结束时。 。 。 .
- 流体框架不支持节点.js与
--no-experimental-fetch旗帜.
- Fluid框架支持支持ES2022标准库的现代浏览器.
支持的工具
- 类型脚本 6.0数字 :
- 流体框架支持全部
strict选项. - 设定建设目标(
lib, (中文(简体) ),target改为:ES2022或后会. - 启用
strictNullChecks。 。 。 . - 流体框架不支持 在 TypeScript 6.0 中贬值的配置选项。 。 。 .
- 流体框架不完全支持
exactOptionalPropertyTypes。 。 。 . 如果您启用此选项, 请不要使用in, (中文(简体) ),Reflect.has, (中文(简体) ),Object.hasOwn,或Object.prototype.hasOwnProperty改为Fluid框架类型的窄成员. 这些方法可以错误地排除undefined从可能的值.
- 流体框架支持全部
- 网络软件包 页:1
- 我们不需要一个特定的捆绑者. 其他处理ES模块的捆绑机可以工作,但我们只积极测试网页包.
模块分辨率
在类型脚本中 compilerOptions,使用时 Node16, (中文(简体) ), Node20, (中文(简体) ), NodeNext,或 Bundler 模块分辨率.
这些设置遵循 节点.js v12+无害环境管理 分辨率和加载算法。 。 。 .
不使用 Node10 模块分辨率.
模块格式
- ES模块: 使用ES模块来消耗Fluid框架客户端软件包,包括在Node.js中.
- 常见JS : Fluid Framework在3.0版本或后期不正式支持CommonJS.
贡献准则
你们可以 贡献 通过这些方式实现流体框架:
详细指示改为: repo 文档。 。 。 .
本项目遵循 Microsoft 开源行为守则。 。 。 . 更多信息,改为: 《行为守则》经常被问到的问题。 。 。 . 问题或评论,联系 打开码@ microsoft.com。 。 。 .
这个项目可能包含微软项目的商标或标志,产品,或服务. 这些商标或标志的使用必须遵循微软 商标和品牌准则。 。 。 . 在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.
帮助
读取 流体框架文件 用于了解流体框架概念和API.
要求提供文件未载列的资料, 创建问题。 。 。 .
商标
这个项目可能包含微软项目的商标或标志,产品,或服务.
这些商标或标志的使用必须遵循微软的 商标和品牌准则。 。 。 .
在这个项目的修改后版本中使用微软商标或标志不得造成混淆或暗示微软赞助.