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



推荐阅读
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • TCP长连接设备管理平台:架构与功能概览
    本文介绍了基于TCP长连接的设备管理平台的设计理念、技术选型及主要功能模块。最初,项目旨在实现简单的协议测试,但随着需求扩展,逐步演变为一个完整的前后端分离系统。 ... [详细]
  • 本文回顾了2017年的转型和2018年的收获,分享了几家知名互联网公司提供的工作机会及面试体验。 ... [详细]
  • 程序员如何优雅应对35岁职业转型?这里有深度解析
    本文探讨了程序员在职业生涯中如何通过不断学习和技能提升,优雅地应对35岁左右的职业转型挑战。我们将深入分析当前热门技术趋势,并提供实用的学习路径。 ... [详细]
  • [Vue.js 3.0] Guide – Scaling Up – State Management
    [Vue.js 3.0] Guide – Scaling Up – State Management ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 由中科院自动化所、中科院大学及南昌大学联合研究提出了一种新颖的双路径生成对抗网络(TP-GAN),该技术能通过单一侧面照片生成逼真的正面人脸图像,显著提升了不同姿态下的人脸识别效果。 ... [详细]
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社区 版权所有