Я не удивлен, что ваша карта работает медленно, учитывая, что API вызывается так часто / каждый раз, когда вы загружаете маркер.
Одним из жизнеспособных решений [для сокращения вызовов API] было бы создать своего рода «кэш области» маркеров, чтобы не нужно было снова запрашивать ранее загруженные маркеры.
Из Четыре совета по оптимизации вашей карты с помощью React Native:
Эффективный способ уменьшить количество звонков, которые вам нужно сделать, - это создать локальный кеш.Например, перед каждым запросом создайте ключ с параметрами (тип poi, описание и т. Д.) Вашего запроса и сохраните его в состоянии рядом с запрашиваемой областью.Это можно сделать следующим образом:
Пример кода:
const key = createKey({pinTypes, searchText});
this.setState({
queriedRegion: {
[key]: boundaries(region)
},
businessMarkers,
})
Кэшируя уже запрошенные точки, затем перед извлечением новых точек вы можете проверить, был ли выполнен последний вызов.с тем же ключом и с областью, охватывающей текущий.Если это так, вы знаете, что у вас уже есть все точки, которые вы хотели отобразить, и что вы можете спокойно игнорировать этот запрос (учитывая, что вы всегда запрашиваете все точки в пределах области, которые соответствуют критерию, и вы не фильтруете в зависимости от уровня масштабирования).
if(
this.state.queriedRegion &&
this.state.queriedRegion[key] &&
isRegionWithin(boundaries(region), this.state.queriedRegion[key])
) {
//Do not query the points, they are already fetched !
return;
}
Другим способом предотвращения ненужных визуализаций карты было бы использование shouldComponentUpdate в вашем пользовательском классе маркера.Затем у вас есть элемент управления, чтобы указать, что вы хотите, чтобы ваш маркер отображался только в том случае, если его идентификатор выбран / не выбран / больше / увеличен и т. Д.
shouldComponentUpdate(prevProps) {
return prevProps.isSelected !== this.props.isSelected ||
prevProps.isZoomed !== this.props.isZoomed}
Если у вас много маркеров, которые могут не понадобитьсяпоказано, что вы могли бы рассмотреть « кластеризацию », которая «группирует» группы не нужных для показа маркеров вместе в один большой маркер [в отличие от множества маленьких], но из описанияваше приложение, я не думаю, что это особенно применимо к вам.
Наконец, я бы сказал, чтобы проверить ваш код, чтобы убедиться, что ваши маркеры не выполняют ненужных вычислений: если вы можете передавать реквизиты в качестве аргументов, этосократит время обработки и улучшит производительность!
Надеюсь, это поможет
[кстати, я нашел этот фрагмент кода , который загружает много маркеровЯ подумал, что это может вас заинтересовать.Но учти вышеизложенные пункты!]