docs(agents): record map pin rendering perf fix (signature guard + batched addLayers)
This commit is contained in:
parent
563d91504d
commit
120c76b052
1 changed files with 15 additions and 0 deletions
15
AGENTS.md
15
AGENTS.md
|
|
@ -522,6 +522,21 @@ session with **no other memory of this project**. So:
|
||||||
hand. Publishing with no photo is allowed; the spot stays **Unverified**
|
hand. Publishing with no photo is allowed; the spot stays **Unverified**
|
||||||
(`SpotDetailPage` badge), the success toast says so, and the review queue's
|
(`SpotDetailPage` badge), the success toast says so, and the review queue's
|
||||||
'no photo' flag lets a human look later. The pre-submit checklist still nudges.
|
'no photo' flag lets a human look later. The pre-submit checklist still nudges.
|
||||||
|
- **Map pin rendering (perf, 2026-09-29):** the spot/tour/event/crew marker
|
||||||
|
effect in `SpotMap.tsx` used to `clearLayers()` + rebuild **every** marker
|
||||||
|
whenever the parent handed it fresh arrays, and added each marker with a
|
||||||
|
per-marker `clusterGroup.addLayer()` (each call re-clusters the whole set) —
|
||||||
|
several synchronous full rebuilds per load on a few-hundred-pin map. Now:
|
||||||
|
(1) a **marker signature** (group geohash + spot/listing event ids + weather
|
||||||
|
colour/icon + layer toggles) short-circuits the effect when nothing that
|
||||||
|
affects the rendered pins changed — ids are enough because spot/listing/tour/
|
||||||
|
event/crew are all **addressable** (a new id on every edit), so unrelated array
|
||||||
|
churn (trust scores, comment/zap totals, re-sorts) no longer rebuilds the map;
|
||||||
|
(2) markers are collected and added with the plugin's bulk **`addLayers()` in
|
||||||
|
`requestAnimationFrame` batches of 150**, cancelled on effect re-run. One
|
||||||
|
cluster refresh per batch, pins paint progressively, main thread stays free.
|
||||||
|
**If you change what a marker renders, add it to the signature** or the update
|
||||||
|
will be skipped. `showSpots/showShops/showGear` are now effect deps.
|
||||||
- **Empty-map nudge (2026-09-28):** `MapPage` distinguishes the two empties — the
|
- **Empty-map nudge (2026-09-28):** `MapPage` distinguishes the two empties — the
|
||||||
existing "No spots match" card is for *filters* (`filteredSpots.length === 0 &&
|
existing "No spots match" card is for *filters* (`filteredSpots.length === 0 &&
|
||||||
allLocations.length > 0`) and a new "No spots mapped yet — be the first" card
|
allLocations.length > 0`) and a new "No spots mapped yet — be the first" card
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue