[{"data":1,"prerenderedAt":291},["ShallowReactive",2],{"post-engineering/bfcache":3},{"id":4,"title":5,"body":6,"date":282,"description":283,"extension":284,"meta":285,"navigation":233,"path":286,"seo":287,"stem":288,"tags":289,"__hash__":290},"content/engineering/bfcache.md","bfcache可能导致新部署的代码不生效",{"type":7,"value":8,"toc":280},"minimark",[9,276],[10,11,15,19,29,32,35,127,130],"blur-reveal",{":duration":12,"className":13},"0.75",[14],"pt-8",[16,17,18],"p",{},"bfcache（Back/Forward Cache）可能让用户在前进 / 后退导航时看到的是旧页面状态，从而看不到新部署的代码，但这不是一次重新加载失败，而是浏览器的刻意设计行为。",[16,20,21,28],{},[22,23,27],"a",{"href":24,"rel":25},"https://web.dev/articles/bfcache?hl=zh-cn",[26],"nofollow","bfcache"," 恢复的是“内存快照”，不是“最新资源”",[16,30,31],{},"解决方案：",[16,33,34],{},"手动检测",[36,37,42],"pre",{"className":38,"code":39,"language":40,"meta":41,"style":41},"language-js shiki shiki-themes github-light github-dark","window.addEventListener('pageshow', (event) => {\n  if (event.persisted) {\n    // 来自 bfcache\n    console.warn('Restored from bfcache')\n  }\n})\n","js","",[43,44,45,82,91,98,115,121],"code",{"__ignoreMap":41},[46,47,50,54,58,61,65,68,72,75,79],"span",{"class":48,"line":49},"line",1,[46,51,53],{"class":52},"sVt8B","window.",[46,55,57],{"class":56},"sScJk","addEventListener",[46,59,60],{"class":52},"(",[46,62,64],{"class":63},"sZZnC","'pageshow'",[46,66,67],{"class":52},", (",[46,69,71],{"class":70},"s4XuR","event",[46,73,74],{"class":52},") ",[46,76,78],{"class":77},"szBVR","=>",[46,80,81],{"class":52}," {\n",[46,83,85,88],{"class":48,"line":84},2,[46,86,87],{"class":77},"  if",[46,89,90],{"class":52}," (event.persisted) {\n",[46,92,94],{"class":48,"line":93},3,[46,95,97],{"class":96},"sJ8bj","    // 来自 bfcache\n",[46,99,101,104,107,109,112],{"class":48,"line":100},4,[46,102,103],{"class":52},"    console.",[46,105,106],{"class":56},"warn",[46,108,60],{"class":52},[46,110,111],{"class":63},"'Restored from bfcache'",[46,113,114],{"class":52},")\n",[46,116,118],{"class":48,"line":117},5,[46,119,120],{"class":52},"  }\n",[46,122,124],{"class":48,"line":123},6,[46,125,126],{"class":52},"})\n",[16,128,129],{},"版本校验",[36,131,133],{"className":38,"code":132,"language":40,"meta":41,"style":41},"window.addEventListener('pageshow', async (e) => {\n  if (e.persisted) {\n    const latest = await fetch('/version.json', { cache: 'no-store' })\n    const { version } = await latest.json()\n\n    if (version !== __APP_VERSION__) {\n      location.reload()\n    }\n  }\n})\n",[43,134,135,163,170,202,229,235,249,260,266,271],{"__ignoreMap":41},[46,136,137,139,141,143,145,148,151,154,157,159,161],{"class":48,"line":49},[46,138,53],{"class":52},[46,140,57],{"class":56},[46,142,60],{"class":52},[46,144,64],{"class":63},[46,146,147],{"class":52},", ",[46,149,150],{"class":77},"async",[46,152,153],{"class":52}," (",[46,155,156],{"class":70},"e",[46,158,74],{"class":52},[46,160,78],{"class":77},[46,162,81],{"class":52},[46,164,165,167],{"class":48,"line":84},[46,166,87],{"class":77},[46,168,169],{"class":52}," (e.persisted) {\n",[46,171,172,175,179,182,185,188,190,193,196,199],{"class":48,"line":93},[46,173,174],{"class":77},"    const",[46,176,178],{"class":177},"sj4cs"," latest",[46,180,181],{"class":77}," =",[46,183,184],{"class":77}," await",[46,186,187],{"class":56}," fetch",[46,189,60],{"class":52},[46,191,192],{"class":63},"'/version.json'",[46,194,195],{"class":52},", { cache: ",[46,197,198],{"class":63},"'no-store'",[46,200,201],{"class":52}," })\n",[46,203,204,206,209,212,215,218,220,223,226],{"class":48,"line":100},[46,205,174],{"class":77},[46,207,208],{"class":52}," { ",[46,210,211],{"class":177},"version",[46,213,214],{"class":52}," } ",[46,216,217],{"class":77},"=",[46,219,184],{"class":77},[46,221,222],{"class":52}," latest.",[46,224,225],{"class":56},"json",[46,227,228],{"class":52},"()\n",[46,230,231],{"class":48,"line":117},[46,232,234],{"emptyLinePlaceholder":233},true,"\n",[46,236,237,240,243,246],{"class":48,"line":123},[46,238,239],{"class":77},"    if",[46,241,242],{"class":52}," (version ",[46,244,245],{"class":77},"!==",[46,247,248],{"class":52}," __APP_VERSION__) {\n",[46,250,252,255,258],{"class":48,"line":251},7,[46,253,254],{"class":52},"      location.",[46,256,257],{"class":56},"reload",[46,259,228],{"class":52},[46,261,263],{"class":48,"line":262},8,[46,264,265],{"class":52},"    }\n",[46,267,269],{"class":48,"line":268},9,[46,270,120],{"class":52},[46,272,274],{"class":48,"line":273},10,[46,275,126],{"class":52},[277,278,279],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":41,"searchDepth":100,"depth":100,"links":281},[],"2026-01-14","前端应用成功发布新版本后，bfcache有可能导致新代码不生效","md",{},"/engineering/bfcache",{"title":5,"description":283},"engineering/bfcache",[27],"IEH7a00Hdqpna3D5yOsW_FT1XoOil4h_J1SaIerGTFA",1776757930045]