我在一个web应用程序中使用WAGMI,当区块链状态发生变化时,我看到在我的应用程序中读取更新值的速度有点慢。查看文档,我在useContractReads方法中看到了两个可能相关的选项:'watch‘和'cacheOnBlock’。
我的猜测是,每当新块到达且值发生更改时,watch都会自动更新值,cacheOnBlock说返回的数据是基于当前块号缓存的,因此它似乎立即被认为是“陈旧的”,但我想您必须手动获取更新吗?
是否有人能提供一些额外的上下文或场景来说明这些选项何时有用?
发布于 2022-12-10 00:15:12
当使用useContractRead()钩子时,有几个选项告诉它从块链中获取数据的频率。
你所链接的文档很好地概括了它。
watch将检查每个块的更改,如果您不编写自定义钩子或条件逻辑,快速链上的这些更改可能会导致RPC端点的速率限制问题(下面将详细介绍)。除非另有说明,否则您将其设置为“始终阅读”。如果您正在设置一个应用程序来寻找套利机会或需要对其采取行动,但这会大大降低NFT造币网站上获取最后一个令牌ID的速度,这将是有帮助的。
cacheOnBlock再一次做的正是文档中说的那样。它以块时间将数据写入缓存,在该块之后被认为是“陈旧的”。除非触发刷新,否则只需读取,并将其存储到缓存中。可以使用cacheTime或“staleTime”来确定数据在缓存中的保存时间(以ms为单位)。如果没有设置其他逻辑,则cacheTime默认为0,这意味着您需要将enabled设置为false或编写自定义钩子以防止将其持续读取到缓存。staleTime是指数据被认为过时的时间(以ms为单位),并且可以在0和Infinity之间设置。
wagmi中有很多变量决定了应该查询链的频率,它们可以一起用于微调应用程序。
如果要限制查询数据的频率,需要考虑的另一个重要变量是refetch变量,它可以从读取钩子中有条件地查询逻辑。
https://ethereum.stackexchange.com/questions/136386
复制相似问题