React Native Maps: Custom Markers cause extreme lag and slow down on android
Asked Answered
B

2

15

I load up to about 2000 markers on the map. It works fine for the first few seconds but then slows down sharply. To fix it I need to clear the app data, then it only works for a few seconds and again like before.

const mapMarkers = [
    {id: 1, code: "603778", lat: 35.761791, lng: 51.389438},
    {id: 2, code: "788621", lat: 35.712278, lng: 51.361785},
    {id: 3, code: "129667", lat: 35.674757, lng: 51.485328},
    {id: 4, code: "999646", lat: 35.772885, lng: 51.446735},
    {id: 5, code: "111524", lat: 35.755656, lng: 51.446774},
    //...
];

let markers = mapMarkers.map(marker => {
    return (<Marker
        key={marker.code}
        coordinate={{latitude: marker.lat, longitude: marker.lng}}
        image={require('./images/markers.png')}
        onPress={() => console.log("pressed")}
    />)
});

I tested on emulator and physical device and had problems with both.

tip: I use react-native-map-clustering package for marker cluster.

Bronco answered 13/1, 2020 at 12:46 Comment(0)
B
33

I tried two ways that would improve performance a bit

  1. change key to index (key={index})
mapMarkers.map((marker, index) => {
    return (<Marker
        key={index}
        ...
    />)
 });
  1. disable props tracksViewChanges={false} or add icon props instead of image
mapMarkers.map((marker, index) => {
    return (<Marker
        key={index}
        tracksViewChanges={false}
        icon={require('./images/markers.png')}
        ...
    />)
});
Bronco answered 13/1, 2020 at 12:46 Comment(6)
key with index is bad practice, there is no performance optimization on it, it has drawbacksClergyman
@beqakokhodze Unless you are mutating the list, it doesn't have any bad impact, however agree with you that it's not going to help in performing better.Raceme
Setting tracksViewChanges is the winner, made a huge difference for meEnumerate
Is there any way to solve my problem? tks so muchToandfro
tracksViewChanges={false} worked for me. ThanksFoldaway
The "tacksViewChanges={false}" was the one for me, especially on android google maps. Thank you!Pierrette
O
1

if you use MapViewDirections you have to pass props as optimizeWaypoints=true the the issue will be gone. and fully re run the program.

<MapViewDirections optimizeWaypoints={true}/>
Opulence answered 6/4, 2021 at 17:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.