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.
我们统一收口哈啰&高德服务能力,业务侧不需要每次接入LBS和高德服务都做http服务的接入工作,只用接入地图提供的组件包。我们还提供在类型声明,线接入文档,简化业务方的接入成本和工作量。
我们在前端侧优化了请求策略,加入了降级兜底能力,稳定性更有保障。
我们从缓存方面入手,为调用量特别突出的逆地理设计缓存方案,通过缓存机制来减少调用,减轻服务压力。
我们的SDK项目有完善的TypeScript类型声明,可以让开发者在编写代码时享受到类型检查和自动补全的便利。
我们使用TypeDoc将类型声明生成对应的Markdown文档文件,再使用VuePress生成静态站点,方便开发者快速接入和使用。
未来,我们还打算添加在线文档接口mock的能力,可以编辑入参,发送请求,显示响应数据,让开发使用更便利。
为了保证地图组件的稳定性,地图组件对高德和LBS的请求策略进行了优化,在请求失败或超时的情况下,用高德服务做一次补偿(降级兜底),尝试再次获取数据。
为了保证地图组件的通用性和可扩展性,地图组件对哈罗LBS和高德的出入参数据结构进行了统一,统一以哈啰数据结构为基准。
这样可以提高地图组件的兼容性和灵活性,同时也可以方便开发者使用。
我们定制开发了专门用来处理数据转换的工具库 @hb/map-convert。
数据字段的转换
将数据转换为目标数据类型
对于一些数据类型完全不一样的内容,可自定义转换函数,保障数据转换工具的兼容性和灵活性。
比如:高德返回值数据中比较典型的空数组问题处理,city:[ ] -> city: StringType() -> city: "",类似这种字段数据我们会进行类型统一
支持多层级的数据处理
在逆地理编码缓存中,我们采用LRUCache缓存策略,它可以根据访问频率和时间自动淘汰最不常用的数据,保证缓存的空间利用率和数据的新鲜度。
原理解析:新数据插入到链表头部;每当缓存命中(即缓存数据被访问),则将数据移到链表头部;当链表满的时候,将链表尾部的数据丢弃。
在请求开始前,在onBefore生命周期中,我们可以使用缓存插件来检查是否有缓存数据,如果有则直接返回缓存数据,不需要发起网络请求。
在请求成功时,我们可以使用缓存插件来保存返回的数据到缓存中,方便下次使用。
在onSuccess生命周期中,使用ubt埋点插件来记录用户请求成功状态。
在onError生命周期中,使用ubt埋点插件来上报错误信息,方便后续分析和优化。
HelloTech
Official Hello technology account, sharing tech insights and developments.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.