Loading indicators displayed immediately for asynchronous data fetching
Why it matters
A popup that fetches remote data with no visual feedback looks broken. Users click Sync Now, see no change for two seconds while the background script hits the network, and click again — triggering duplicate requests, duplicate writes, or duplicate API billing. Without a spinner, disabled button, or skeleton screen, users cannot distinguish a slow operation from a frozen extension. Perceived performance drops, support tickets spike, and the extension accumulates one-star reviews blaming it for bugs that are actually just unreported async work.
Severity rationale
Low because missing indicators degrade perceived quality but do not block functionality or corrupt data.
Remediation
Disable the triggering control and swap its label while the async operation runs, then restore in a finally block so errors still clear the loading state. Place this pattern in every popup handler that touches the network or background script in popup.js:
btn.disabled = true;
btn.textContent = 'Syncing...';
try { await sync(); } finally { btn.disabled = false; btn.textContent = 'Sync Now'; }
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Extension UX & Performance Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
Taxons
History
- 2026-04-18·v1.0.0·Initial import from extension-ux-performance·automated