Problem z wydajnością wynika z faktu, że każdy znacznik jest indywidualnym elementem DOM. Przeglądarki zmagają się z renderowaniem ich tysięcy.
W twoim przypadku, to łatwe obejście byłoby zamiast używać Circle Markers i mieć je wykonane na kanwie (na przykład używając mapy preferCanvas
opcji, albo z konkretnym canvas renderer które przechodzą jak renderer
opcja dla każdego kręgu Marker). Tak domyślnie działają Mapy Google: znaczniki są rysowane na płótnie.
var map = L.map('map', {
preferCanvas: true
});
var circleMarker = L.circleMarker(latLng, {
color: '#3388ff'
}).addTo(map);
lub
var map = L.map('map');
var myRenderer = L.canvas({ padding: 0.5 });
var circleMarker = L.circleMarker(latLng, {
renderer: myRenderer,
color: '#3388ff'
}).addTo(map);
W tym rozwiązaniu, każda Koło znacznik nie jest pojedynczy element DOM, lecz jest pobierany przez dla pacjenta na kolumnę pojedynczych Obraz, który jest o wiele łatwiejsze uchwyt dla przeglądarki.
Co więcej, Ulotka nadal śledzi pozycję myszy i powiązane z nią zdarzenia i uruchamia odpowiednie zdarzenia na swoich znacznikach okręgu, dzięki czemu można nadal słuchać takich zdarzeń (np. Kliknięcia myszą itp.).
Demo z 100k punktów: https://jsfiddle.net/sgu5dc0k/
Możliwy duplikat [kreślenie 140K punktów leafletjs] (http://stackoverflow.com/questions/37043791/plotting-140k-points-in-leafletjs) – ghybs
faktycznie chcę narysować kropki lub znaczniki o różnych właściwościach. Kolor, kształt ... itd. Nie tylko utwórz nakładkę. –
Możesz spróbować ze znacznikami okręgu (możesz dostosować ich kolor) na [Canvas] (http://leafletjs.com/reference-1.0.3.html#map-prefercanvas) – ghybs