Skip to content

Best Practices

Production guidance for Browser Lifecycle adoption.

Topics

TopicSummary
Session LifecycleOne session per tab, explicit start/stop/dispose
Memory ManagementUnsubscribe and dispose promptly
Event CleanupTrack unsubscribe handles
PerformanceDisable unused modules
ConfigurationValidate before start
Cross-Tab CommunicationUse leadership instead of ad-hoc localStorage
Idle DetectionChoose thresholds deliberately
Visibility HandlingPause expensive work when hidden
Framework IntegrationKeep browser access behind providers
Plugin DevelopmentSmall hooks, fail safely
SSR SafetyClient-only initialization
SecurityTreat cross-tab messages as untrusted
AccessibilityDo not rely on visibility alone for a11y state
TestingMock capabilities, assert event order
DebuggingUse playground and diagnostics APIs
  • Initialize Browser Lifecycle once per tab
  • Dispose on route or component teardown
  • Disable modules you do not use
  • Validate configuration before creating a session
  • Use typed events instead of raw DOM listeners in application code
  • Multiple competing lifecycle instances in one tab
  • Passing resolved configuration back into merge helpers
  • Subscribing to browser APIs directly when a module already normalizes the signal
  • Ignoring plugin errors in production

Playground

Validate recommendations interactively at http://127.0.0.1:4273.

JOC is a JayOnCode monorepo of @jayoncode/* packages. Docs sync from source via TypeDoc and sync scripts.