You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ApolloClient InMemoryCache getFieldValue为何在开发模式用maybeDeepFreeze?

Apollo Client开发模式下maybeDeepFreeze性能问题解析

开发模式下maybeDeepFreeze的必要性

  • maybeDeepFreeze是开发模式的防护机制,核心作用是深度冻结InMemoryCache中的实体对象。Apollo Client的缓存设计为只读,直接修改缓存数据会破坏内部状态一致性,引发查询结果异常、数据同步错误等难以排查的bug。
  • 冻结后,任何尝试修改缓存对象的操作都会立即抛出错误,能在开发阶段快速定位违规代码,避免这类问题流入生产环境。
  • 生产模式下该逻辑会自动移除,因为冻结对象的递归遍历开销对生产环境性能影响不可忽视,且生产代码应已通过测试确保不会随意修改缓存。

让开发模式查询速度接近生产模式的方案

  • 全局关闭缓存冻结:通过InMemoryCache的freezeResults配置项手动关闭开发模式的冻结逻辑,示例代码:
const cache = new InMemoryCache({
  freezeResults: false,
});

注意:关闭后必须严格遵守缓存只读原则,禁止直接修改缓存返回的对象,否则可能引入难以排查的状态问题。

  • 阶段性切换生产模式验证:在需要验证性能时,临时以生产模式构建项目(如设置NODE_ENV=production启动),但此方式会丢失开发模式的热更新、错误提示等特性,仅适合阶段性性能测试。

内容的提问来源于stack exchange,提问作者Yu-Lin Hsiao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 09:49:52