热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

在您的应用程序中优化ReactNativeMap[操作指南]

使您的ReactNative地图变得更快,响应更快的四种方法。为什么这很重要作为使用ReactNative或任何平台语言的移动开发人员,您迟早将不得不处

使您的React Native地图变得更快,响应更快的四种方法。

为什么这很重要

作为使用React Native或任何平台/语言的移动开发人员,您迟早将不得不处理地图。 而到了那个时候,您需要知道如何有效地对其进行优化,因为如果不这样做,您的用户体验将受到极大的损害。 在本文中,我将以4种可能的方式向您展示如何使您的地图更快,更平滑和响应更快。

由于react-native-maps,将地图放入并在React Native应用程序中使用非常简单。 这是一个简单的API,您只需渲染MapView即可显示空白地图,然后渲染一堆标记,这些标记本质上是地图上的图钉。

如果您不熟悉react-native-map,请确保在继续操作之前先查看其文档 。

问题是什么

问题是,与许多其他组件一样,React Native映射必须处理的数据越多 ,其性能就会越差 。 在公园里散步,为全市最喜欢的咖啡馆显示5个标记; 但是可以说,如果您的应用程序显示了该国的所有麦当劳,那么如果您放大足够大,就会有成百上千个标记! 您肯定会遇到滞后的情况,直到您的应用实际上无法使用。

tracksViewChanges = {false}/>);
}

2. React.memo或shouldComponentUpdate或PureComponent

最小化渲染的另一种方法是仅在Marker道具发生实际更改时才重新渲染Marker (通常它们不会:在地图上查看房屋时,房屋的最后一次移动时间是什么时候?)

React为我们提供了React.memo (用于功能组件)和shouldComponentUpdate (用于类组件)。 或者,您也可以使用React.PureComponent来获得与shouldComponentUpdate相同的结果

首先,以React.memo :

import React from 'react' ;
import { Marker } from 'react-native-maps' ;
function CarPin ( props ) {const {coord} = props;return (coordinate = {coord}tracksViewChanges = {false}/>);
}
export default CarMarker = React.memo(CarPin);

一个shouldComponentUpdate的例子:

import React from 'react' ;
import { Marker } from 'react-native-maps' ;
export default class CarPin extend React . Component {shouldComponentUpdate(nextProps) {return nextProps.coord !== this .props.coord}render(){return (coordinate = {this.props.coord}tracksViewChanges = {false}/>);}
}

React.PureComponent的示例:

import React from 'react' ;
import { Marker } from 'react-native-maps' ;
export default class CarPin extend React . PureComponent {render(){return (coordinate = {this.props.coord}tracksViewChanges = {false}/>);}
}

如果您想进一步自定义组件的行为,请确保查看React.memo , shouldComponentUpdate和React.PureComponent官方文档。

3.使用“图标”代替“图像”来构建自定义标记

在文档中没有明确指出性能差异,而是根据官方源代码 :

/*** A custom image to be used as the marker's icon. Only local image resources are allowed to be used.*/
image: PropTypes.any,
/*** Marker icon to render (equivalent to `icon` property of GMSMarker Class).Using this property has an advantage over `image` in term of performance, battery usage... because it doesn't trigger tracksViewChanges. (tracksViewChanges is set to YES by default if iconView is not nil).*/
icon: PropTypes.any,

4.集群您的标记

让我向您展示我构建的应用程序中的示例,而不是在这种情况下解释集群的含义。 下图显示了具有聚类的地图(左)和没有聚类的地图(右)

使用诸如react-native-map-clustering或@ bam.tech / react-native-component-map-clustering之类的 API可以轻松完成地图聚类

尽管外观上的差异已经令人印象深刻,但性能上的差异却更加惊人。 要了解原因,我们必须查看地图聚类的工作方式:

首先,API将计算MapView上(相对)较小区域中的标记数。 代替渲染标记,它将在地图上渲染标记的数量。 当用户放大或缩小时,该数字将再次计算。 当用户放大足够时,将显示实际标记。

这意味着,该应用程序将从渲染大量标记中节省大量时间。 取而代之的是,它将仅计算和呈现标记的数量。 这也是您应该注意的地方 -由于应用程序每次用户放大或缩小时都必须计算标记的数量,因此请确保在渲染时间和重新计数时间之间进行权衡是值得的。

结论

优化React Native映射虽然相对简单,但并不是由API自动为您完成的简单操作。 在本文中,我列出了4种不同的方法:

  1. trackViewChanges ,请关闭自定义标记中的trackViewChanges
  2. 使用React.memoshouldComponentUpdateReact.PureComponent
  3. 使用“图标”代替“图像”来构建自定义标记。
  4. 集群您的标记。

我希望通过使用这些技巧,您将能够构建更快,响应速度更快的应用程序,从而提供出色的用户体验。 祝你好运!

如果您对我的工作感兴趣或想要与我联系,请随时 给我发送电子邮件 , 访问我的Github 在LinkedIn上与我联系

From: https://hackernoon.com/how-to-optimize-react-native-map-in-your-application-eeo3nib



推荐阅读
author-avatar
黑鸽子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有