Troubleshooting (performance)#
This page is organized by symptom → diagnosis → fix.
If you want the conceptual model first, read Performance mental model.
If you want a catalog of “performance cliffs”, read Edge cases (performance).
Troubleshooting template (use this structure)#
When adding a new entry, use:
Symptom#
What the user sees (include on-screen text if possible).
Likely causes (ordered)#
3–7 plausible causes, each testable.
How to confirm#
Concrete checks (UI actions, view count, toggles, browser tools).
Fix#
Step-by-step actions (safe fixes first).
Prevention#
What to do earlier to avoid this next time.
Symptom: “Filtering is slow / sliders lag / the UI stutters when I filter”#
Likely causes (ordered)#
CPU-bound visibility recomputation (especially with Live filtering on).
Too many enabled filters (work scales with
n_cells × n_filters).Multiview multiplier (filters/updates interact with many views).
How to confirm#
Turn Live filtering off and click
FILTERonce; if it becomes smooth, you were stuck in a recompute loop.Disable all but one filter; if performance returns, filter stacking was the multiplier.
Clear snapshots and retry; if performance improves, view count was amplifying the cost.
Fix#
For continuous fields: Live filtering off → adjust sliders → click FILTER once.
See Color-by behavior.Disable/remove no-op filters (filters that don’t change counts given the other filters).
Keep multiview lean while tuning filters; snapshot after you stabilize.
For very large datasets: do coarse gating upstream in Python; treat UI filtering as refinement.
Prevention#
Teach “apply once” workflows for large datasets.
Avoid using the UI as the primary data-cleaning layer on million-cell data.
Related docs:
Symptom: “Loading a dataset freezes / takes forever / tab crashes”#
Likely causes (ordered)#
You are loading a large
.h5addirectly in the browser (memory cliff; not truly lazy).Disk/network I/O is slow (network drive, remote mount, throttled server).
The dataset is too large for the current machine/GPU (VRAM pressure during initialization).
Browser extensions or corporate policies interfere with file APIs or GPU acceleration.
How to confirm#
If it’s a
.h5adbrowser load: try the same file via Server Mode; if it works, the in-browser load path was the issue.If it’s remote: open Network tab and look for long requests / timeouts.
Check Task Manager / Activity Monitor: if memory usage spikes rapidly, you’re hitting a memory cliff.
Fix#
Prefer Server Mode for large
.h5ad/ huge.zarr.
See Server Mode (CLI + Python) — Recommended for Large Datasets.Move data to a fast local disk (avoid network mounts when possible).
Reduce dataset complexity (fewer fields, fewer categories) or use a lite export.
Try a clean browser profile / private window to rule out extensions.
Prevention#
Treat in-browser
.h5adload as “small quick preview only”.For large teams, standardize on a supported loading workflow (server mode or exports).
Related docs:
Symptom: “Switching genes is slow / gene coloring pauses”#
Likely causes (ordered)#
Gene expression is loaded on demand (cold cache).
The data is being fetched over a remote server/network.
The gene/feature set is extremely large and search/metadata is heavy.
How to confirm#
Switch to the same gene again; if it’s faster the second time, you’re seeing cache warming.
If remote: watch Network requests while switching genes; long latency suggests I/O-bound.
Fix#
Expect the first gene load to be slower; benchmark cold vs warm explicitly.
For remote workflows: move the server closer (LAN) or use local server mode when possible.
If gene switching is consistently slow: reduce other multipliers (views, overlays) while exploring expression.
Prevention#
For large datasets: choose a workflow that supports efficient lazy-loading (server mode).
Related docs:
Benchmarking methodology and metrics (cold vs warm measurement)
Symptom: “WebGL context lost” or “the canvas goes blank”#
Likely causes (ordered)#
GPU out of memory (too many points/views, smoke grid too high, overlay too heavy).
GPU driver crash/reset (unstable drivers, integrated GPUs under pressure).
Corporate/managed environment disables/blocks hardware acceleration.
How to confirm#
Did it happen immediately after enabling smoke, increasing quality, or opening many views? That points to VRAM pressure.
Check
chrome://gpu/about:supportto confirm hardware acceleration and WebGL2.
Fix (safe → aggressive)#
Reload the page (context loss requires reload).
After reload, reduce GPU load:
points mode (avoid smoke),
fewer views,
disable overlays or reduce density/bloom,
smaller window.
If it still happens on moderate datasets:
try a different browser (Chrome/Edge),
update GPU drivers/OS.
Prevention#
Keep a conservative default preset for laptops and workshops.
Related docs:
System requirements (context lost troubleshooting)
Symptom: “It’s fine in single view but slow in grid view”#
Likely causes (ordered)#
You are simply multiplying GPU work by
n_views.Overlays/post-processing scale with pixels × views.
How to confirm#
Clear snapshots; if performance recovers, the view multiplier is the culprit.
Fix#
Keep grid view to the minimum number of comparisons you need.
Disable overlays while in grid view, or lower overlay density and bloom.
Prevention#
Adopt the workflow: tune in live view → snapshot for comparison.
Symptom: “Performance gets worse over time”#
Likely causes (ordered)#
Thermal throttling (laptops).
Memory growth (large caches, large sessions, possible leak).
Many accumulated views/highlights/analysis artifacts in one session.
How to confirm#
If the laptop gets hot and performance degrades gradually: thermals are likely.
Watch memory in Chrome Task Manager; if it steadily rises without stabilizing, investigate memory behavior.
Clear snapshots/highlights and see if responsiveness returns.
Fix#
Reduce sustained GPU load (fewer views, smaller window, no smoke/overlays).
Reload the page to reset memory state.
Avoid accumulating lots of snapshots and massive highlights in one long-running session.
Prevention#
For long sessions, keep conservative presets and take periodic “reset” breaks (reload + restore a saved session).
Symptom: “It’s slow on one machine/browser but fine on another”#
Likely causes (ordered)#
Different GPU class (integrated vs discrete), different VRAM.
Hardware acceleration disabled on the slow machine.
Driver differences (outdated or unstable GPU drivers).
Browser extension/policy interference.
How to confirm#
Compare WebGL2 diagnostics (
chrome://gpuorabout:support).Run the synthetic benchmark (if available) with the same preset and compare FPS.
See Benchmark tools (if exposed).
Fix#
Use a recommended browser (Chrome/Edge) with hardware acceleration.
Update drivers/OS on the slow machine.
Use a lighter export/workflow for weaker machines.
Prevention#
For teams/workshops, publish a minimum supported environment checklist.
If you still can’t resolve it#
At this point, treat it as a reportable issue.
Go to Reporting performance bugs and include:
your scenario,
dataset size and loading method,
hardware/browser,
and at least one number (TTFR, FPS, or filter apply time).
Screenshot placeholders (you will replace later)#
WebGL context loss typically indicates GPU memory pressure; reduce views and quality settings after reloading.#
Turning Live filtering off avoids repeated recomputation; use FILTER to apply the range once on large datasets.#