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



推荐阅读
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文是一篇翻译文章,介绍了async/await的用法和特点。async关键字被放置在函数前面,意味着该函数总是返回一个promise。文章还提到了可以显式返回一个promise的方法。该特性使得async/await更易于理解和使用。本文还提到了一些可能的错误,并希望读者能够指正。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 微信商户扫码支付 java开发 [从零开发]
    这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。相关链接:微信支 ... [详细]
  • 校园表白墙微信小程序,校园小情书、告白墙、论坛,大学表白墙搭建教程
    小程序的名字必须和你微信注册的名称一模一样在后台注册好小程序。mp.wx-union.cn后台域名https。mp.wx-union.cn ... [详细]
  • Android系统启动过程分析一、Android平台架构首先贴一张Android系统架构图方便理解整个Android架构,这可以让我们从整体上对整个启动流程有个大概认知。可以看出整 ... [详细]
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社区 版权所有