Problem
When rapidly zooming or panning a Gosling.js visualization, each view change immediately fires off tile/track fetches. In cloud-backed storage (e.g. AWS S3, GCS or Harvard Dataverse) this can easily exceed rate limits and trigger 403/429 errors.
With a single track this may be tolerable. However, our use case involves hundreds of tracks and hundreds of concurrent users, so unthrottled fetch bursts simply won’t scale.
Current Behavior
// In our client component:
const goslingSpec = useMemo<GoslingSpec>(() => ({
views: [
{
xDomain: { chromosome: chr, interval: [start, end] },
layout: "linear",
tracks: atacTrack
}
]
}), [chromosome, start, end]);
<GoslingComponent ref={goslingRef} spec={goslingSpec} reactive={true} />
Example Track Definition
const ATACURL =
"https://dataverse.harvard.edu/api/access/datafile/11102908";
export const atacTrack = {
alignment: "overlay",
title: "Aggregated ATAC-seq signal, all biosamples",
data: {
url: ATACURL,
type: "bigwig",
column: "position",
value: "value",
aggregation: "sum",
binSize: 1
},
tracks: [
{
mark: "bar",
x: { field: "start", type: "genomic", linkingId: "link1" },
xe: { field: "end", type: "genomic" },
y: {
field: "value",
type: "quantitative",
axis: "right",
},
color: { value: "blue" },
stroke: { value: "blue" },
strokeWidth: { value: 0.8 },
opacity: { value: 0.7 },
tooltip: [
{ field: "value", type: "quantitative", alt: "ATAC-seq signal" },
],
},
],
width: 800,
height: 100,
}
Every Zoom or Pan immediately triggers one or more HTTP requests for each track. Rapid pan/zoom generates dozens of concurrent fetches.
Steps to Reproduce
Configure a view with a bigWig (cloud-hosted) track.
Render in browser, then repeatedly zoom in/out or pan back/forth.
Observe hundreds of simultaneous fetch() or XHR calls and occasional 403/429s.
Proposed Enhancement
Expose a global or per‐view debounce/delay parameter (e.g. viewFetchDebounceMs)
Default to a small delay (e.g. 100 ms) so brief drags/zooms don’t fire fetches
Allow overriding per‐view or track if truly real-time behavior is needed
<GoslingComponent
spec={spec}
reactive={true}
fetchDebounceMs={100} // NEW prop to debounce spec changes
/>
Thank you for considering this feature. It would make Gosling far more robust for large-scale deployments. @sehilyi
Problem
When rapidly zooming or panning a Gosling.js visualization, each view change immediately fires off tile/track fetches. In cloud-backed storage (e.g. AWS S3, GCS or Harvard Dataverse) this can easily exceed rate limits and trigger 403/429 errors.
With a single track this may be tolerable. However, our use case involves hundreds of tracks and hundreds of concurrent users, so unthrottled fetch bursts simply won’t scale.
Current Behavior
Example Track Definition
Every Zoom or Pan immediately triggers one or more HTTP requests for each track. Rapid pan/zoom generates dozens of concurrent fetches.
Steps to Reproduce
Configure a view with a bigWig (cloud-hosted) track.
Render in browser, then repeatedly zoom in/out or pan back/forth.
Observe hundreds of simultaneous fetch() or XHR calls and occasional 403/429s.
Proposed Enhancement
Expose a global or per‐view debounce/delay parameter (e.g. viewFetchDebounceMs)
Default to a small delay (e.g. 100 ms) so brief drags/zooms don’t fire fetches
Allow overriding per‐view or track if truly real-time behavior is needed
Thank you for considering this feature. It would make Gosling far more robust for large-scale deployments. @sehilyi