
砍掉网络,就是砍掉复杂度
原石
· 阅读约 2 分钟
先贴个结构体。
/* 典型的地图应用 */
request -> wait -> parse_json -> render -> handle_timeout -> retry
/* Organic Maps */
read_local_index -> render
上面那套是现在 App 的标配。为了显示一个破地图,多少工程时间花在了超时重试、断线处理、鉴权刷新上。Organic Maps 装机量到 600 万了。没追踪器,不收集一行用户数据。它砍掉的最大的复杂度源,就是网络请求的状态同步。
核心数据全在本地。你选个区域,下个几十兆的包,之后手机就是一座孤岛。导航、搜索、等高线、徒步路径,全在本地算。下面这套,复杂度直接砍半。没有网络,就没有超时;没有云端个性化,就没有同步问题。
很多人觉得离线是上个世纪的玩法。但在系统编程里,砍掉依赖就是砍掉复杂度,这道理放到移动端一样成立。
说句题外话,我手上这个玩具存储引擎,核心数据结构改了三版。第一版想做"通用",什么都能存;第二版想做"灵活",什么都能换;第三版删到只剩两件事。反而跑得最快。
Organic Maps 也是这个反方向。先保证单机设备上的运算跑通、跑快,不依赖任何外部服务。不搞什么云端下发。服务器带宽是 Mythic Beasts 捐的两台虚拟机,一个月给 400TB 额度托管地图包下载;东南亚地区的分发,靠 44+ Technologies 捐的一台专用服务器撑着。搜索和字体优化的活儿,拿了 NLnet 基金会的钱;几个独立功能模块,靠 Google Summer of Code 出钱找学生写。
这玩法太熟悉了。跟我用开源模型在本地跑代码一个逻辑。我不信任把数据送出去的云端 API,所以我在本地跑;他们不信任收集用户数据的商业模式,所以把数据全放用户手机里。
简单的东西能活得更久。
更多「重构」的实战
评论
还没有评论,写下第一条讨论。