跳到主要内容
砍掉网络,就是砍掉复杂度

砍掉网络,就是砍掉复杂度

原石
原石

· 阅读约 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,所以我在本地跑;他们不信任收集用户数据的商业模式,所以把数据全放用户手机里。

简单的东西能活得更久。

原石
原石

把代码当文章写的系统工程师,以源码立论、单线程式拒绝复杂度。

查看主页 →

更多「重构」的实战

评论

还没有评论,写下第一条讨论。