[{"data":1,"prerenderedAt":612},["ShallowReactive",2],{"toc-zh-\u002Fadvanced\u002Fcache-system":3,"page-zh-\u002Fadvanced\u002Fcache-system":370},{"id":4,"title":5,"body":6,"description":363,"extension":364,"meta":365,"navigation":336,"path":366,"seo":367,"stem":368,"__hash__":369},"content_zh\u002Fadvanced\u002Fcache-system.md","缓存体系",{"type":7,"value":8,"toc":355},"minimark",[9,17,21,32,35,40,71,76,87,92,97,100,106,112,115,132,143,146,260,322,325,351],[10,11,12,16],"p",{},[13,14,15],"strong",{},"本章目标","：理解字典模块的三级缓存架构、读写流程和配置调优。",[18,19,20],"h2",{"id":20},"三级缓存架构",[22,23,28],"pre",{"className":24,"code":26,"language":27},[25],"language-text","用户组件调用 useDict \u002F useDict \u002F useDictTree\n  ↓\n一级: 内存缓存 (Map) ← 最快，命中直接返回\n  ↓ 未命中\n二级: IndexedDB 持久缓存 ← 跨页面保留\n  ↓ 未命中 \u002F 版本不一致\n三级: API 网络请求 ← 最终数据源\n  ↓ 获取成功\n回填: 同时写入 IndexedDB + 内存缓存\n","text",[29,30,26],"code",{"__ignoreMap":31},"",[18,33,34],{"id":34},"各层详解",[10,36,37],{},[13,38,39],{},"第一层：内存缓存",[41,42,43,51,54,61,68],"ul",{},[44,45,46,47,50],"li",{},"存储在 JavaScript ",[29,48,49],{},"Map"," 对象中",[44,52,53],{},"生命周期：页面关闭即清除",[44,55,56,57,60],{},"容量：",[29,58,59],{},"cache.memoryMax","（默认 200）",[44,62,63,64,67],{},"过期：",[29,65,66],{},"cache.ttl"," 毫秒后过期（默认 0 = 永不过期）",[44,69,70],{},"淘汰：LRU 策略",[10,72,73],{},[13,74,75],{},"第二层：IndexedDB",[41,77,78,81],{},[44,79,80],{},"持久存储，除非清除浏览器数据或模块失效缓存",[44,82,83,84],{},"可开关：",[29,85,86],{},"cache.indexedDB.enabled",[10,88,89],{},[13,90,91],{},"第三层：API",[41,93,94],{},[44,95,96],{},"请求去重：同一字典类型的并发请求会合并为一次网络调用",[18,98,99],{"id":99},"读写流程",[10,101,102,105],{},[13,103,104],{},"读（getDict）","：内存缓存 → 请求去重 → IndexedDB → API",[10,107,108,111],{},[13,109,110],{},"强制刷新（refresh）","：清除内存缓存 → 跳过 IndexedDB → 直接请求 API",[18,113,114],{"id":114},"版本检测",[10,116,117,118,121,122,121,125,127,128,131],{},"首次访问某个仓库的字典数据时（调用 ",[29,119,120],{},"useDict"," \u002F ",[29,123,124],{},"useDictTree",[29,126,120],{},"），模块惰性调用 ",[29,129,130],{},"fetchVersion()"," 与 localStorage 存储的上次版本号比较：",[41,133,134,137,140],{},[44,135,136],{},"版本一致 → 缓存有效",[44,138,139],{},"版本不一致 → 清空该仓库所有缓存",[44,141,142],{},"检测失败 → 忽略错误，继续使用缓存",[18,144,145],{"id":145},"配置调优",[22,147,152],{"className":148,"code":149,"filename":150,"language":151,"meta":31,"style":31},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dict: {\n  cache: {\n    memoryMax: 200,       \u002F\u002F 最多缓存条目数\n    ttl: 0,               \u002F\u002F 过期时间，0 = 永不过期\n    indexedDB: {\n      enabled: true,      \u002F\u002F 是否启用 IndexedDB\n    },\n  },\n}\n","nuxt.config.ts","ts",[29,153,154,170,180,199,215,225,242,248,254],{"__ignoreMap":31},[155,156,159,163,167],"span",{"class":157,"line":158},"line",1,[155,160,162],{"class":161},"sBMFI","dict",[155,164,166],{"class":165},"sMK4o",":",[155,168,169],{"class":165}," {\n",[155,171,173,176,178],{"class":157,"line":172},2,[155,174,175],{"class":161},"  cache",[155,177,166],{"class":165},[155,179,169],{"class":165},[155,181,183,186,188,192,195],{"class":157,"line":182},3,[155,184,185],{"class":161},"    memoryMax",[155,187,166],{"class":165},[155,189,191],{"class":190},"sbssI"," 200",[155,193,194],{"class":165},",",[155,196,198],{"class":197},"sHwdD","       \u002F\u002F 最多缓存条目数\n",[155,200,202,205,207,210,212],{"class":157,"line":201},4,[155,203,204],{"class":161},"    ttl",[155,206,166],{"class":165},[155,208,209],{"class":190}," 0",[155,211,194],{"class":165},[155,213,214],{"class":197},"               \u002F\u002F 过期时间，0 = 永不过期\n",[155,216,218,221,223],{"class":157,"line":217},5,[155,219,220],{"class":161},"    indexedDB",[155,222,166],{"class":165},[155,224,169],{"class":165},[155,226,228,231,233,237,239],{"class":157,"line":227},6,[155,229,230],{"class":161},"      enabled",[155,232,166],{"class":165},[155,234,236],{"class":235},"sfNiH"," true",[155,238,194],{"class":165},[155,240,241],{"class":197},"      \u002F\u002F 是否启用 IndexedDB\n",[155,243,245],{"class":157,"line":244},7,[155,246,247],{"class":165},"    },\n",[155,249,251],{"class":157,"line":250},8,[155,252,253],{"class":165},"  },\n",[155,255,257],{"class":157,"line":256},9,[155,258,259],{"class":165},"}\n",[261,262,263,276],"table",{},[264,265,266],"thead",{},[267,268,269,273],"tr",{},[270,271,272],"th",{},"场景",[270,274,275],{},"建议",[277,278,279,291,302,312],"tbody",{},[267,280,281,285],{},[282,283,284],"td",{},"字典很少变动",[282,286,287,290],{},[29,288,289],{},"ttl: 0","，依赖版本号失效",[267,292,293,296],{},[282,294,295],{},"字典经常变动",[282,297,298,301],{},[29,299,300],{},"ttl: 600000","（10 分钟）",[267,303,304,307],{},[282,305,306],{},"移动端",[282,308,309],{},[29,310,311],{},"memoryMax: 50",[267,313,314,317],{},[282,315,316],{},"SSR 为主",[282,318,319],{},[29,320,321],{},"indexedDB.enabled: false",[18,323,324],{"id":324},"本章你学会了",[41,326,329,339,345],{"className":327},[328],"contains-task-list",[44,330,333,338],{"className":331},[332],"task-list-item",[334,335],"input",{"disabled":336,"type":337},true,"checkbox"," 理解三级缓存的架构和读写流程",[44,340,342,344],{"className":341},[332],[334,343],{"disabled":336,"type":337}," 知道版本检测如何自动失效缓存",[44,346,348,350],{"className":347},[332],[334,349],{"disabled":336,"type":337}," 根据场景调优缓存配置",[352,353,354],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":172,"depth":172,"links":356},[357,358,359,360,361,362],{"id":20,"depth":172,"text":20},{"id":34,"depth":172,"text":34},{"id":99,"depth":172,"text":99},{"id":114,"depth":172,"text":114},{"id":145,"depth":172,"text":145},{"id":324,"depth":172,"text":324},"深入理解三级缓存架构 —— 内存、IndexedDB、API，以及版本检测与自动失效机制。","md",{},"\u002Fadvanced\u002Fcache-system",{"title":5,"description":363},"advanced\u002Fcache-system","Pk7RIGJah9cHc5D8I_wCt-zWaAc0i8qw_En6wZBBsfo",{"id":4,"title":5,"body":371,"description":363,"extension":364,"meta":610,"navigation":336,"path":366,"seo":611,"stem":368,"__hash__":369},{"type":7,"value":372,"toc":602},[373,377,379,384,386,390,408,412,420,424,428,430,434,438,440,450,458,460,536,580,582,600],[10,374,375,16],{},[13,376,15],{},[18,378,20],{"id":20},[22,380,382],{"className":381,"code":26,"language":27},[25],[29,383,26],{"__ignoreMap":31},[18,385,34],{"id":34},[10,387,388],{},[13,389,39],{},[41,391,392,396,398,402,406],{},[44,393,46,394,50],{},[29,395,49],{},[44,397,53],{},[44,399,56,400,60],{},[29,401,59],{},[44,403,63,404,67],{},[29,405,66],{},[44,407,70],{},[10,409,410],{},[13,411,75],{},[41,413,414,416],{},[44,415,80],{},[44,417,83,418],{},[29,419,86],{},[10,421,422],{},[13,423,91],{},[41,425,426],{},[44,427,96],{},[18,429,99],{"id":99},[10,431,432,105],{},[13,433,104],{},[10,435,436,111],{},[13,437,110],{},[18,439,114],{"id":114},[10,441,117,442,121,444,121,446,127,448,131],{},[29,443,120],{},[29,445,124],{},[29,447,120],{},[29,449,130],{},[41,451,452,454,456],{},[44,453,136],{},[44,455,139],{},[44,457,142],{},[18,459,145],{"id":145},[22,461,462],{"className":148,"code":149,"filename":150,"language":151,"meta":31,"style":31},[29,463,464,472,480,492,504,512,524,528,532],{"__ignoreMap":31},[155,465,466,468,470],{"class":157,"line":158},[155,467,162],{"class":161},[155,469,166],{"class":165},[155,471,169],{"class":165},[155,473,474,476,478],{"class":157,"line":172},[155,475,175],{"class":161},[155,477,166],{"class":165},[155,479,169],{"class":165},[155,481,482,484,486,488,490],{"class":157,"line":182},[155,483,185],{"class":161},[155,485,166],{"class":165},[155,487,191],{"class":190},[155,489,194],{"class":165},[155,491,198],{"class":197},[155,493,494,496,498,500,502],{"class":157,"line":201},[155,495,204],{"class":161},[155,497,166],{"class":165},[155,499,209],{"class":190},[155,501,194],{"class":165},[155,503,214],{"class":197},[155,505,506,508,510],{"class":157,"line":217},[155,507,220],{"class":161},[155,509,166],{"class":165},[155,511,169],{"class":165},[155,513,514,516,518,520,522],{"class":157,"line":227},[155,515,230],{"class":161},[155,517,166],{"class":165},[155,519,236],{"class":235},[155,521,194],{"class":165},[155,523,241],{"class":197},[155,525,526],{"class":157,"line":244},[155,527,247],{"class":165},[155,529,530],{"class":157,"line":250},[155,531,253],{"class":165},[155,533,534],{"class":157,"line":256},[155,535,259],{"class":165},[261,537,538,546],{},[264,539,540],{},[267,541,542,544],{},[270,543,272],{},[270,545,275],{},[277,547,548,556,564,572],{},[267,549,550,552],{},[282,551,284],{},[282,553,554,290],{},[29,555,289],{},[267,557,558,560],{},[282,559,295],{},[282,561,562,301],{},[29,563,300],{},[267,565,566,568],{},[282,567,306],{},[282,569,570],{},[29,571,311],{},[267,573,574,576],{},[282,575,316],{},[282,577,578],{},[29,579,321],{},[18,581,324],{"id":324},[41,583,585,590,595],{"className":584},[328],[44,586,588,338],{"className":587},[332],[334,589],{"disabled":336,"type":337},[44,591,593,344],{"className":592},[332],[334,594],{"disabled":336,"type":337},[44,596,598,350],{"className":597},[332],[334,599],{"disabled":336,"type":337},[352,601,354],{},{"title":31,"searchDepth":172,"depth":172,"links":603},[604,605,606,607,608,609],{"id":20,"depth":172,"text":20},{"id":34,"depth":172,"text":34},{"id":99,"depth":172,"text":99},{"id":114,"depth":172,"text":114},{"id":145,"depth":172,"text":145},{"id":324,"depth":172,"text":324},{},{"title":5,"description":363},1782551379404]