WebSocket 페이지의 뒤로·앞으로 캐시

BFCache for WebSocket pages

열린 WebSocket이 있는 페이지도 캐시 진입 시 연결을 닫고 복원될 수 있습니다.

···
html
<div class="atlas"><div class="head"><b>BFCache · WebSocket page</b><span class="pulse"></span></div><div class="stage"><div class="bf-page box"><div class="bf-status"><span id="bf-socket"></span><b id="bf-label">socket open</b></div><div class="bf-state">draft text stays here</div></div><div class="bf-steps mono"><span id="bf-step">live page</span><span>→</span><span>cached page</span><span>→</span><span>Back</span></div></div></div>
css
.atlas{width:min(94vw,720px);height:min(88vh,320px);border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:clamp(10px,2.5vmin,18px);display:flex;flex-direction:column;gap:clamp(7px,2vmin,12px);font:500 clamp(12px,3.2vmin,16px)/1.25 var(--font-sans),sans-serif;color:var(--fg);box-shadow:0 8px 28px rgba(0,0,0,.06)}.head{display:flex;align-items:center;justify-content:space-between;color:var(--accent);letter-spacing:.03em}.pulse{width:8px;height:8px;border-radius:50%;background:var(--accent);animation:blink 1.3s infinite}@keyframes blink{50%{opacity:.2}}.stage{flex:1;min-height:0;position:relative;overflow:hidden}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.muted{color:var(--muted)}.accent{color:var(--accent)}.box{border:1px solid var(--line);border-radius:8px;background:var(--bg)}.bf-page{height:70%;padding:12px;display:flex;flex-direction:column;justify-content:space-between;transition:transform .5s,opacity .5s}.bf-page.cached{transform:scale(.82);opacity:.85}.bf-status{display:flex;align-items:center;gap:8px;color:var(--accent)}.bf-status span{width:10px;height:10px;border-radius:50%;background:var(--accent)}.bf-status.off span{background:var(--muted)}.bf-state{border:1px dashed var(--line);padding:8px;border-radius:5px;font-size:14px}.bf-steps{display:flex;justify-content:space-between;margin-top:10px;font-size:12px;color:var(--muted)}#bf-step{color:var(--accent)}
js
let phase=0;function tick(){document.querySelector('.bf-page').classList.toggle('cached',phase===1);document.querySelector('.bf-status').classList.toggle('off',phase!==0);document.getElementById('bf-label').textContent=['socket open','socket closed','restore + reconnect'][phase];document.getElementById('bf-step').textContent=['live page','enter BFCache','Back restores'][phase];phase=(phase+1)%3}tick();setInterval(tick,1000)

뒤로·앞으로 캐시는 페이지의 상태를 보관해 이전 화면으로 빠르게 돌아옵니다. Chrome은 WebSocket 연결이 열린 페이지도 캐시에 들어갈 때 연결을 자동으로 닫고 페이지를 보관할 수 있도록 확장했습니다.

데모는 연결 중인 화면이 캐시에 들어가며 소켓이 닫히고, 뒤로 가기로 화면 상태가 복원되는 순서를 보여줍니다. 복원 뒤 실시간 통신이 필요하다면 앱은 연결 재개를 처리해야 합니다.

언제 쓰나

실시간 연결 화면의 뒤로 가기가 느릴 때 BFCache 적격성과 복원 처리를 확인합니다.

페이지로 열기 ↗