The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
When you press Back or Forward, the browser does not always reload the page. Many browsers keep a finished page in memory when you leave it, along with its JavaScript state, and can show that same page again when you return. The open menu, the half-filled form, and the scroll position you left behind can all reappear without a new network request or a fresh page load. The feature responsible is the back/forward cache, usually called bfcache.
Why an old interface state comes back
A normal page load builds the page from scratch: the browser fetches or reuses the HTML, parses it, builds the DOM, and runs the scripts. Bfcache skips that rebuild. When you navigate away, the browser may hold the entire page in memory, including its DOM and its JavaScript heap, and then reactivate that same page when you return.
MDN’s bfcache entry describes the stored snapshot as containing “the entire page in memory, including the JavaScript heap; in-progress code is paused when the user navigates away and resumed when they return to the page.” Chromium’s bfcache overview makes the same point more briefly: the browser “might just pause that page, keeping everything fully intact.” That is why a stale-looking interface can be the correct result of the browser doing its job. The application never ran its startup code again, so nothing reset the state it had when you left.
How bfcache differs from ordinary HTTP caching
People often lump these together because both avoid downloads, but they reuse different things. An HTTP cache stores server responses and can answer a request without contacting the server. Bfcache stores a live page. The table below compares the three paths.
#1 Best Overall
- 【Tri-Mode Connection Wireless Keyboard】Custom keyboard supports Bluetooth 5.0, 2.4GHz wireless and Type-C wired connectivity, allowing you to seamlessly switch between 5 devices depending on the scenario. The large 4000mAh battery ensures extended use, making this topographic theme wireless keyboard ideal for productivity and gaming, whether you’re at home or on the move.
- 【Here Comes Pattern Shine Through Keyboard】 At the heart of the M67 is the revolutionary use of IMD technology, allowing the RGB light to pass through the pattern of keycap, giving your PC mechanical keyboard an unparalleled aesthetics. The M67 keyboard also features 2 led lights under each stabilizer and 5 led lights on the space bar, the unique design that takes the overall feel and aesthetics of the RGB keyboard to the next level.
- 【QMK/VIA Custom Gaming Keyboard】You can easily program and remap each key you want on any system (macOS, Windows, or Linux). The open-source firmware means endless possibilities for keyboard layouts, shortcuts, backlight effects, and more. This qmk/ via custom keyboard is ideal for gaming and professional work. Note: User can remap a key on wired mode only. Once it's done, the keyboard will work on both wireless and wired modes.
- 【Gasket-mounted Mechanical Keyboard &PCB Single Key Slotting】The M67 white mechanical keyboard features a gasket structure, and PCB single key slotting, better optimizes resilience and stability, making the hand feel softer and more elastic. With four layers of filling silencer fills the gap between the PCB, the positioning plate and the Switch. It's the ideal choice for a satisfying,low-noise typing experience, whether in an office or gaming environment.
- 【Hot Swappable & Transparent Linear Switches】The keyboard is equipped with hot-swappable PCB to ensure easy replacement of different mechanical switches with 3-pin and 5-pin. The M67 Hot-Swappable custom keyboard adopts pre-lubed transparent mechanical switches with 80 million keystroke lifespan. Creamy and thocky sounding gives you unlimited fun while typing.
| Aspect | Normal page load | HTTP cache hit | Bfcache restore |
|---|---|---|---|
| What is reused | Nothing from the page itself | Stored server responses | The in-memory page, including DOM and JavaScript heap |
| Page built again | Yes | Yes, from cached responses | No |
| Scripts run from start | Yes | Yes | No; paused code resumes |
| JavaScript state | Reset to initial values | Reset to initial values | Preserved as it was when the user left |
| Full page load event | Fires as usual | Fires as usual | Not repeated; pageshow fires with event.persisted set to true |
The practical consequence is that an HTTP cache can make a reload faster while still producing a clean state, whereas bfcache can return a state you had already changed.
Not every Back or Forward action uses bfcache
A restore is an optimization, not a guarantee. Browsers apply their own eligibility rules, and those rules differ between browsers and versions. A page that is eligible at one moment may be evicted later, for example to free memory or after a time limit. When that happens the browser falls back to a normal load, and your startup code runs again. Your application therefore has to handle both outcomes.
Common reasons a page may not be restored include:
- An
unloadevent listener on the page, which Chrome DevTools reports as an actionable issue. - Cache-control headers, such as
Cache-Control: no-store, that mark the response as not storable. - Eviction, because the browser has limited memory or has kept the page for too long.
- Browser-specific restrictions that vary by engine and version.
Test restoration in the browsers your users actually use. Do not assume that every Back or Forward action restores the page.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #2
- 【High Quality PBT Keycaps & Dye Sublimation】The mechanical keyboard keycaps mimics the unique contours of Spider Web with a simple and stylish design, perfect for gamers who want to show off their love of nature.
- 【Unique Spider Web Shine Through Design】Spider Web pattern with side carved backlit font. Soft RGB backlight penetrates both patterns and letters, creates stunning visual effects under gaming desk RGB lighting setup, great for PC gaming room, e-sports station and content creator streaming setup decoration.
- 【134 Keys Full Universal Keycap Set】Complete key kit covers all standard layouts: 60%, 65%, 75%, 87 TKL, 96%, 104/100% full-size mechanical keyboards. Comes with supplementary spacebar, modifier keys, function keys and novelties, perfect for custom keyboard builders to rebuild or upgrade their gaming rig at home & streaming station.
- 【Wide Compatibility & Ergonomic Cherry Profile】Classic design. Ergonomically, it won't be tired after long-term use. ergonomic design cherry height, designed for backlit/non-backlit mechanical keyboards.Standard cross MX stem fits all Cherry MX, Gateron, Kailh, Outemu mechanical switches. Smooth matte PBT surface resists oil, fingerprint and sweat, no shiny gloss after months of intense gaming. Suitable for home office, remote work, competitive gaming and daily laptop typing accessories.
- 【Complete After-sales Support & Versatile Gift Choice】Each dagaladoo keycap set is fully inspected before shipment. Perfect holiday gift for mechanical keyboard enthusiasts, gamer boyfriend, streamers and custom keyboard hobbyists. If you receive missing or damaged keycaps, contact our customer service for free replacement support.
How to detect a restore in your code
The web.dev guide on back/forward cache documents an event-based check. The pageshow event fires after load on the first visit, and again whenever a page is restored from bfcache. The persisted property tells you which case you are in.
- Add a listener for
pageshowonwindowin your page’s startup code, before any code that depends on the restore state. - Inside the listener, check
event.persisted. A value oftruemeans the page was restored from bfcache. - When
persistedistrue, refresh whatever state could have changed while the user was away, as described in the freshness section below.
window.addEventListener('pageshow', (event) => {
if (event.persisted) {
// Page came back from bfcache: re-check time-sensitive state here.
}
});
If you need a cleanup hook when the user leaves, use pagehide instead of unload. The web.dev guidance recommends this because unload blocks eligibility.
Finding out why a page was not restored
When you expect a restore and do not see one, work through the browser’s diagnostics in this order.
Rank #3
- 0.02MM RAPID TRIGGER FOR FPS CONTROL: Adjust Rapid Trigger sensitivity down to 0.02mm while setting the actuation point separately to match your play style. Movement-based activation and reset support faster counter-strafing, quick peeks, repeated inputs and responsive direction changes in FPS and competitive PC games.
- 8000HZ POLLING RATE FOR RESPONSIVE INPUT: The stable wired connection supports an 8000Hz polling rate, updating keyboard inputs up to eight times more frequently than a standard 1000Hz keyboard. Built for fast movement commands, rapid key presses and players who value consistent low-latency performance.
- WEB DRIVER WITH 4 ONBOARD PROFILES: Customize actuation points, Rapid Trigger sensitivity, key assignments and RGB lighting through a supported Chrome or Edge browser without installing traditional desktop software. Save up to four onboard profiles for different games, users and control preferences.
- COMPACT 68-KEY LAYOUT WITH ARROW KEYS: The space-saving design leaves more room for wide mouse movement while retaining dedicated arrow keys and essential navigation controls. Double-shot keycaps provide durable legends and clear RGB illumination for gaming desks, bedrooms, dorm rooms and compact PC setups.
- MAGNETIC SWITCHES BUILT FOR GAMING: Contactless Hall Effect sensing provides a smooth linear response and reduces physical contact wear, with switches rated for up to 100 million presses. Factory-lubed stabilizers improve larger-key feel, making the T68-C a practical birthday, Christmas or back-to-school gift for teens, students and FPS gamers.
Chrome DevTools
In Chrome, open DevTools, go to the Application panel, and select Background services → Back/forward cache. Run the test there. The panel reports whether the page is eligible and lists the reasons it is not, along with the frames involved when a blocker sits inside an iframe.
notRestoredReasons in code
Where supported, PerformanceNavigationTiming.notRestoredReasons exposes the reasons restoration was blocked. MDN marks this API as experimental with limited availability, so use it as a supplementary signal in instrumentation, not as a cross-browser diagnostic you can rely on everywhere.
Common blocker checklist
- Replace
unloadlisteners withpagehide. - Check the response headers of the page and of any frames it embeds for
Cache-Control: no-store. - Confirm that the page does not hold open connections or resources that the browser treats as ineligible; DevTools names the specific blocker when it can.
- Retest after each change, because a single blocker can hide others.
Refreshing state that may have changed
A restored page shows what was true when the user left, not what is true now. For a checkout, an authenticated account page, a cart, or a live status value, that difference can matter. When event.persisted is true, decide what needs re-checking. A cart total or stock count might need a request to the server. An account page might need to confirm that the session is still valid. A small read-only widget may need nothing at all.
Rank #4
- Used Book in Good Condition
Do not use Cache-Control: no-store across the whole site to prevent restores. It removes the speed benefit of bfcache for every page, and the freshness problem can usually be solved in the page’s own code. Reserve it for responses that genuinely contain sensitive data and should never be stored.
Keep in mind that a restored page may also carry sensitive content from the previous session, such as a visible account name or a filled-in address. On shared computers, consider whether that content should be cleared or re-authenticated when the page is restored.
Free tools Windows power users keep installed
One-click scans. No signup required.
Measuring restored visits
Analytics tools that count pageviews from the initial load event may miss a restored page, because no new initial load happens. The web.dev guide suggests recording the pageshow event when persisted is true, and keeping restore navigations separate from ordinary page loads when you analyze performance.
Best Value
The scale of back and forward navigation is worth knowing when you decide how much this matters. The web.dev guide, in its 2026 update, cites Chrome usage data showing that about 1 in 10 desktop navigations and 1 in 5 mobile navigations are back or forward navigations. That figure measures navigation share. It does not tell you what fraction of those navigations were served from bfcache, and it should not be read as a restore rate.
Some monitoring SDKs can report bfcache metrics directly. Sentry, for example, describes an opt-in bfcache metrics integration in its JavaScript SDK v11, so check your SDK version and its settings before relying on that data.
A note on NinoGames specifically
No public NinoGames documentation describes its browser setup, framework, or game engine, so the behavior and examples above describe browsers in general. Whether NinoGames pages are restored from bfcache depends on the browser a visitor uses and on how each page is built. Testing with the Chrome DevTools path above is the most direct way to confirm what happens on a specific page.
Recommended Free Tools
The reader question behind this topic is often a symptom rather than a request for theory. One example is a user asking how to make window.history.back() ignore a previous navigation menu state. In that case, the menu is typically restored from bfcache with its open state intact, so the fix is to reset the menu in the pageshow handler when event.persisted is true, not to change the back navigation itself.
Quick Recap
“
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

