I am not sure if this is an issue of react-leaflet-markercluster, react-leaflet, leaflet, react, or my code.
I have a map with several thousand markers and I am using react-leaflet-markercluster for marker clustering. If I need to update a global state of MapComponent
, there is 1-3 seconds delay when this change is reflected.
I created a codesandox with 5000 markers and you can see there 2 use cases with performance issues:
1.) MapComponent
is inside react-reflex element, that allows resizing panel and propagates new dimensions (width, height) to MapComponent
. If width and height are changed, mapRef.invalidateSize()
is called to update map dimensions. Resizing is extremely slow.
2.) If user clicks on Marker
, global state selected is updated. It is a list of clicked marker ids. Map calls fitBounds
method to focus on clicked marker and also marker icon is changed. There is around 1 second delay.
In my project, if I need to change a MapComponent
state, it takes 2-3 seconds in dev mode when changes are reflected and it is just a single rerender of MapComponent
and its elements (markers).
I took a look at Chrome performance profile and it seems like most time is spent in internal React methods.
It is possible to fix this by preventing rerendering using memo
, which is similar to shouldComponentUpdate
, but it makes whole code base too complicated. preferCanvas
option doesn't change anything. I am wondering what is a good way to fix these issues.