热门标签 | 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



推荐阅读
  • 本文总结了在使用React Native开发过程中遇到的一些常见问题及其解决方法,包括配置错误、依赖问题和特定组件的使用技巧。 ... [详细]
  • 本文介绍了如何在React Native应用中获取组件的实际宽度和高度,并详细说明了屏幕单位(如dp)与像素(px)之间的转换方法。 ... [详细]
  • 择要:Fundebug的JavaScript毛病监控插件同步支撑Vue.js异步毛病监控。Vue.js从降生至今已5年,尤大在本年2月份宣布了严重更新,即Vue2.6。更新包含新增 ... [详细]
  • 本文介绍了Windows驱动开发的基础知识,包括WDF(Windows Driver Framework)和WDK(Windows Driver Kit)的概念及其重要特性,旨在帮助开发者更好地理解和利用这些工具来简化驱动开发过程。 ... [详细]
  • Vue中从后端获取JSON字符串的方法
    本文详细探讨了如何在Vue项目中从后端获取JSON字符串,并将其正确解析和显示,对于开发者来说具有较高的实用性和参考价值。 ... [详细]
  • 本文探讨了在多媒体软件开发中处理大型WAV音频文件的策略。由于Windows提供的`sndPlaySound` API仅适用于小文件,对于大型WAV文件,我们介绍了使用MCI(Media Control Interface)命令的一种有效解决方案。 ... [详细]
  • 在使用SteamVR Unity Plugin进行开发时,开发者常常面临设备获取复杂、设备重启后索引ID变化导致配置错乱等问题。针对这些问题,HTC推出了Vive Input Utility Unity Plugin,旨在简化开发流程并提高开发效率。 ... [详细]
  • 本文探讨了在Java中处理JSON数据的各种方法,包括APIJSON的使用案例,以及如何通过不同的工具和库实现JSON与Java对象之间的高效转换。 ... [详细]
  • PHP 5.4.8 编译安装指南
    本文详细介绍了如何在Linux环境下编译安装PHP 5.4.8,并配置为FastCGI模式运行。包括所需依赖包的安装、源代码下载、编译配置及启动服务等步骤。 ... [详细]
  • 酷家乐 Serverless FaaS 产品实践探索
    本文探讨了酷家乐在 Serverless FaaS 领域的实践与经验,重点介绍了 FaaS 平台的构建、业务收益及未来发展方向。 ... [详细]
  • Navicat Premium中MySQL用户管理:创建新用户及高级设置
    本文作为Navicat Premium用户管理系列的第二部分,主要介绍如何创建新的MySQL用户,包括设置基本账户信息、密码策略、账户限制以及SSL配置等。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
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社区 版权所有