firebase / firebase/firebase-js-sdk
FR: WebSockets left open on pagehide prevent use of back/forward cache on Chrome
- Dominant language
- TypeScript
- Stars
- 5.1k
- Forks
- 1k
- Avg merge
- 2d 21h
- Merged PRs (30d)
- 37
Description
### Operating System
macOS 15.3.1
### Environment (if applicable)
Chrome 134.0.6998.89
### Firebase SDK Version
v4.12.1
### Firebase SDK Product(s)
Database
### Project Tooling
Unknown/ N/A as this is being detected from end-user side
### Detailed Problem Description
Database SDK's WebSocket connection doesn't consistently close when a page becomes hidden (`visibilitychange` or `pagehide`), preventing Chrome from using Back/Forward Cache (bfcache). This forces full reloads, degrading the user experience.
To improve bfcache compatibility, the SDK could close the WebSocket connection within the `pagehide` event (or when `visibilitychange` state is `hidden`).
I'm not sure, but I think this could be addressed in `PersistentConnection` by modifying the `onVisible_` to call `close()` when visibility becomes hidden, and ensuring `shouldReconnect_` prevents immediate reconnection when the page is not visible.
### Steps and code to reproduce issue
1. Navigate to https://www.aajtak.in/ and wait for page to load
2. In Application tab, select Back/forward cache and then select "Test back/forward cache"
Contributor guide
Assessment
This issue has not been assessed yet.