无需登录 数据私有 本地保存

Web Locks API 探索器 - 跨标签页资源协调

91
0
0
0

核心功能特性

独占锁

支持创建exclusive模式的独占锁,同一时刻只有一个标签页或Worker可以持有该锁。当一个标签页持有独占锁时,其他所有试图获取同一锁的请求都会被阻塞等待。通过工具可以直观地观察独占锁的互斥特性,体验锁的获取、持有和释放完整生命周期。

共享锁

支持创建shared模式的共享锁,多个标签页可以同时持有同一锁的共享版本。但共享锁与独占锁互斥:当有标签页持有共享锁时,其他标签页无法获取独占锁;当有标签页持有独占锁时,其他标签页无法获取任何模式的锁。适用于读多写少的并发场景。

ifAvailable选项

支持设置ifAvailable: true选项,获取锁时如果锁当前不可用则立即返回false而非阻塞等待。这种模式适用于非关键操作,例如尝试性地更新缓存但不希望阻塞页面加载的情况。工具会清晰展示ifAvailable模式下获取成功和失败两种结果的行为差异。

steal选项

支持设置steal: true选项,强制从其他标签页窃取锁的所有权。被窃取的标签页中的锁会抛出AbortError。这种模式仅应在紧急情况下使用(如用户明确要求取消操作),因为强制窃取可能导致其他标签页的数据不一致。工具会展示窃取操作对持有者的影响。

超时机制

支持通过AbortSignal设置锁获取的超时时间。使用AbortController创建AbortSignal,在调用navigator.locks.request()时传入signal参数。当超时触发时,AbortController调用abort()方法,锁请求会被取消并抛出AbortError。工具提供了可视化倒计时,直观展示超时效果。

跨标签页协调

通过BroadcastChannel实现跨标签页的锁状态同步。在一个标签页中操作锁,其他打开同一工具的标签页会实时显示锁的状态变化。支持查看所有标签页中的锁队列状态、等待队列长度等全局信息,帮助开发者理解浏览器锁管理器的全局视角。

全局锁状态监控

实时监控当前浏览器中所有Web Locks的状态,包括已持有的锁、等待队列中的锁请求、锁的模式(独占/共享)、持有锁的标签页信息等。通过navigator.locks.query()方法定期轮询锁状态,并以表格和流程图两种形式展示监控数据。

预设场景

内置多种真实应用场景的预设配置,包括:并发支付防护(确保同一用户不会重复提交支付请求)、数据库迁移协调(多标签页协作完成数据迁移)、资源独占写入(确保文件写入操作的原子性)、读写锁模式(使用共享锁读取、独占锁写入)等。一键加载预设即可体验实际应用。

操作日志

详细记录每次锁操作的完整信息,包括操作时间、操作类型(request/release/query)、锁名称、锁模式、获取选项、操作结果(成功/失败/超时)、操作耗时等。日志支持搜索过滤、导出和清空功能,方便开发者分析锁操作的行为模式。