Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Read storage on window.onstorage #7137

Merged
merged 1 commit into from
Dec 17, 2024
Merged

Read storage on window.onstorage #7137

merged 1 commit into from
Dec 17, 2024

Conversation

gaearon
Copy link
Collaborator

@gaearon gaearon commented Dec 17, 2024

This fixes an issue @estrattonbailey discovered. BroadcastChannel is arriving sooner than localStorage flushes the write to disk so we'd often read the storage data prematurely. This results in tabs failing to sync. This is most noticeable if you open two Settings screen in different windows and try to toggle some settings.

The fix I'm suggesting here is to rely on the window storage which fires when another document (i.e. another tab/window) has changed the storage. In either case we would bail if the contents of the storage is the same as before so it doesn't hurt to add an extra check like this.

Test Plan

Before

before_chrome.mov
before_ff.mov
before_safari.mov

After

after_chrome.mov
after_ff.mov
after_safari.mov

@arcalinea arcalinea temporarily deployed to storage-event - social-app PR #7137 December 17, 2024 02:54 — with Render Destroyed
Copy link

Old size New size Diff
6.78 MB 6.78 MB 83 B (0.00%)

Copy link
Member

@estrattonbailey estrattonbailey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NICE

}
if (next) {
_state = next
_emitter.emit('update')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need this emit? Looks like we might be able to remove the update event now, since we always emit the more modern event with the key that changed.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we do. If the BroadcastChannel thing arrives too early, it will get ignored. And then by the time we get the storage event, we don't know what changed exactly, so we have to deopt. We could try to be smarter about this but I'd prefer to keep it simple and then revisit the assumptions.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In other words we don't know the key if we use the storage event. So this part needs rethinking

@gaearon gaearon merged commit 20d4266 into main Dec 17, 2024
6 checks passed
@gaearon gaearon deleted the storage-event branch December 17, 2024 03:13
drash-course added a commit to drash-course/social-app that referenced this pull request Dec 18, 2024
* main: (58 commits)
  Fix tests
  Layout tweaks (bluesky-social#7150)
  Trending (Beta) (bluesky-social#7144)
  Fix emoji picker position (bluesky-social#7146)
  Tweak Follow dialog Search placeholder (bluesky-social#7147)
  New progress guide - 10 follows (bluesky-social#7128)
  Pipe statsig events to logger (bluesky-social#7141)
  Fix notifications borders (bluesky-social#7140)
  Refetch empty feed on focus (bluesky-social#7139)
  Read storage on window.onstorage (bluesky-social#7137)
  [ELI5] Tweak wording on the signup screen (bluesky-social#7136)
  alf error screen (bluesky-social#7135)
  add safe area view to profile error screen (bluesky-social#7134)
  Adjust gates (bluesky-social#7132)
  disable automaticallAdjustsScrollIndicatorInsets (bluesky-social#7131)
  Bump more native deps (bluesky-social#7129)
  Update more Expo packages (bluesky-social#7127)
  feat: widen recent search profile link for mobile devices (bluesky-social#7119)
  Fix video uploads on native (bluesky-social#7126)
  Fix post time localization on Android (bluesky-social#6742)
  ...

# Conflicts:
#	src/view/com/profile/ProfileSubpageHeader.tsx
#	src/view/screens/ProfileList.tsx
Signez pushed a commit to Signez/bsky-social-app that referenced this pull request Dec 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants