perf(monitor): skip metadata-only map work

This commit is contained in:
lingniu
2026-07-16 05:16:51 +08:00
parent 379f1ce941
commit b21f9a60cd
3 changed files with 75 additions and 21 deletions

View File

@@ -248,6 +248,33 @@ test('skips unchanged refresh redraws and replaces only a moved vehicle label',
expect((replacementLabels[0].options.text as { content: string }).content).toBe('粤A12345');
});
test('does not traverse unchanged point arrays for an asOf-only refresh', async () => {
window.__LINGNIU_APP_CONFIG__ = { amapWebJsKey: 'amap-web-key' };
window.AMapLoader = { load: vi.fn(async () => amapMock()) };
let pointReads = 0;
const observedPoints = new Proxy(pointMap.points, {
get(target, property, receiver) {
if (typeof property === 'string' && /^\d+$/.test(property)) pointReads += 1;
return Reflect.get(target, property, receiver);
}
});
const observedMap = { ...pointMap, points: observedPoints };
const view = render(<FleetMap vehicles={[]} monitorMap={observedMap} onSelect={() => undefined} />);
await waitFor(() => expect(addLabels).toHaveBeenCalled());
pointReads = 0;
await act(async () => {
view.rerender(<FleetMap
vehicles={[]}
monitorMap={{ ...observedMap, asOf: '2026-07-14T01:00:15Z' }}
onSelect={() => undefined}
/>);
await Promise.resolve();
});
expect(pointReads).toBe(0);
});
test('converts AMap GCJ-02 bounds back to WGS-84 before requesting monitor data', async () => {
const [west, south] = wgs84ToGcj02(113, 22);
const [east, north] = wgs84ToGcj02(114, 24);