Backend Development 9 min read

Map Services SDK and Caching Strategies

The Map Services SDK unifies Haro and Gaode LBS capabilities into a single component package with full TypeScript declarations and auto‑generated VuePress documentation, adds optimized request strategies with fallback to Gaode, implements an LRU cache for high‑volume reverse‑geocoding, provides a flexible data‑conversion library, and plans online mock‑API documentation to streamline developer integration.

HelloTech
HelloTech
HelloTech
Map Services SDK and Caching Strategies

我们统一收口哈啰&高德服务能力,业务侧不需要每次接入LBS和高德服务都做http服务的接入工作,只用接入地图提供的组件包。我们还提供在类型声明,线接入文档,简化业务方的接入成本和工作量。

我们在前端侧优化了请求策略,加入了降级兜底能力,稳定性更有保障。

我们从缓存方面入手,为调用量特别突出的逆地理设计缓存方案,通过缓存机制来减少调用,减轻服务压力。

我们的SDK项目有完善的TypeScript类型声明,可以让开发者在编写代码时享受到类型检查和自动补全的便利。

我们使用TypeDoc将类型声明生成对应的Markdown文档文件,再使用VuePress生成静态站点,方便开发者快速接入和使用。

未来,我们还打算添加在线文档接口mock的能力,可以编辑入参,发送请求,显示响应数据,让开发使用更便利。

为了保证地图组件的稳定性,地图组件对高德和LBS的请求策略进行了优化,在请求失败或超时的情况下,用高德服务做一次补偿(降级兜底),尝试再次获取数据。

为了保证地图组件的通用性和可扩展性,地图组件对哈罗LBS和高德的出入参数据结构进行了统一,统一以哈啰数据结构为基准。

这样可以提高地图组件的兼容性和灵活性,同时也可以方便开发者使用。

我们定制开发了专门用来处理数据转换的工具库 @hb/map-convert。

数据字段的转换

将数据转换为目标数据类型

对于一些数据类型完全不一样的内容,可自定义转换函数,保障数据转换工具的兼容性和灵活性。

比如:高德返回值数据中比较典型的空数组问题处理,city:[ ] -> city: StringType() -> city: "",类似这种字段数据我们会进行类型统一

支持多层级的数据处理

在逆地理编码缓存中,我们采用LRUCache缓存策略,它可以根据访问频率和时间自动淘汰最不常用的数据,保证缓存的空间利用率和数据的新鲜度。

原理解析:新数据插入到链表头部;每当缓存命中(即缓存数据被访问),则将数据移到链表头部;当链表满的时候,将链表尾部的数据丢弃。

在请求开始前,在onBefore生命周期中,我们可以使用缓存插件来检查是否有缓存数据,如果有则直接返回缓存数据,不需要发起网络请求。

在请求成功时,我们可以使用缓存插件来保存返回的数据到缓存中,方便下次使用。

在onSuccess生命周期中,使用ubt埋点插件来记录用户请求成功状态。

在onError生命周期中,使用ubt埋点插件来上报错误信息,方便后续分析和优化。

SDKcachingGeoHashlru-cachemap servicesplugin design
HelloTech
Written by

HelloTech

Official Hello technology account, sharing tech insights and developments.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.