写点什么

一个周末重写所有代码,性能提升 10 倍!没有这个 100-1000 倍工程师,就没有现在的谷歌地图

  • 2024-11-12
    北京
  • 本文字数:5510 字

    阅读完需:约 18 分钟

大小:2.62M时长:15:14
一个周末重写所有代码,性能提升10倍!没有这个100-1000倍工程师,就没有现在的谷歌地图

你可能不知道,改变了我们出行方式的谷歌地图,能存在到今天竟离不开一位工程师的周末神操作!

 

谷歌地图被誉为史上最伟大的数字应用之一,即将迎来它的 20 岁生日。然而鲜为人知的是,最初的谷歌地图只是一个笨重的 Windows 程序,刚被收购的时候很慢很卡,直到一位 100-1000 倍的工程师花了一个周末将整套代码重写成了轻量、高效版本,直接将谷歌地图的性能提升了十倍以上!

 


提醒一下,Google Maps 之所以存在,是因为一位 100-1000 倍的工程师在一个周末内重写了所有代码。

 

谷歌收购了一家有创意的小公司

 

谷歌地图的故事可以追溯到 2003 年。当时,谷歌还没有上市,正处于发展初期。

 

那一年,刚从斯坦福大学毕业的年轻产品经理 Bret Taylor 加入谷歌,负责开发一项名为“按位置搜索”的功能。这项功能的基本设想是让用户能够按地理位置进行搜索,但由于缺少地图参考,使用体验非常不直观,几乎没有人使用。Bret 自己也坦言,“根本没有几个用户”。

 

Bret Taylor 这个名字后来逐渐被人熟知——他后来创立了 FriendFeed,被 Facebook 收购,他也因此加入 Facebook 担任 CTO。之后,Bret 离开 Facebook,创立了 Quip,后又接受 Salesforce 的收购,成为 Salesforce 的首席产品官。Bret 最新的身份是 OpenAI 的董事会主席。

 

2003 年,Bret 和谷歌联合创始人 Larry Page,以及新上任的商业开发副总裁 Megan Smith 坐在一起,讨论着“按位置搜索”产品的现状。他们意识到这项功能不够完善,必须改进。

 

当时,AOL 几年前收购的 MapQuest 已经是领先的互联网地图产品。值得一提的是,AOL 收购的还是一家上市公司,花费了 10 亿美元。这次收购发生在互联网泡沫破裂之前,MapQuest 一度拥有庞大的用户群体。虽然时至今日,MapQuest 依然存在,mapquest.com 网站仍然可访问。

 

MapQuest 其实就是提供有一点点定制化空间的地图信息服务。用户在使用的时候得打印出来,上面自然也没法体现任何动态信息。用户使用 MapQuest 的时候,面对的就只有静态页面,先输入出发点、目的地,然后网站会弹出另一个静态网页,用户把路线打印出来,然后在开车出门的时候就可以参考查看。

 

与此同时,雅虎也推出了自己的雅虎地图,并积极添加新功能,以吸引用户。这一情况给了谷歌很大启发,促使他们决定加速发展地图产品,进入这一领域。恰巧此时,红杉资本传来消息,称澳大利亚有一家值得关注的小公司,成为谷歌进一步拓展的潜在合作对象。

 

而那家位于澳大利亚的小公司团队仅有四人,由丹麦兄弟 Lars 和 Jens Rasmussen 创办。

 

起初,Jens 认为 MapQuest 和雅虎地图都做得不够好,也许他们能做出更好的东西来。他们意识到地图本身实际并不是体验的关键,而需要提供相应的导航列表。他们在地图上叠加了新的图块,比如说标明用户要去的地方。他觉得地图应该随着使用者的朝向变换方位,而且内容也应该是动态的。比如说可以交互操作,例如放大、平移,也就是如今我们已经在地图应用上习以为常的各种设计。他们觉得就是应该把地图当作一个个图块来处理,各个动态图块代表着地图上的一小部分,可以将其拼接起来,这样最终形成的其实就是一份聚合视图。用户可以随时移动并查看不同的图块。

 

这是一项极其出色,而且又能够真正实现的技术创新,并最终催生出如今我们看到的地图应用。除了静态图块之外,上面还要有大量矢量内容。他们这场创新之所以成功,就是因为他们意识到如果地图能做得既大又漂亮,可缩放又可搜索,那它本身就能成为其他服务的底层平台。地图本身足以构成一种平台。

 

于是 Lars 不仅说服 Jens 也跟他去了澳大利亚,还招募了两名工程师,他们四个人跑到 Noel 位于悉尼的家里搞开发,并且将公司命名为 Where 2 Technologies。

 

接下来的问题就是具体要如何实现。他们压根没考虑过 Web,因为当时构建具有这样性能和动态水平的应用程序,唯一的方法就是做成桌面软件。

 

他们研究了一下,并且意识到自己的主意很有搞头。于是 Lars 和 Jens 飞回加利福尼亚,想为自己的项目拉点风险投资。他们辗转联系上了红杉,对方对项目表现出浓厚的兴趣。最后的条件不清楚是口头报价还是落在了纸面上,但大概就是用 200 万美元投资该公司 40%的股份。

 

两兄弟对这样的结果相当兴奋,觉得自己的努力有了回报,也很高兴能够心无旁骛地投入研发。

但就在他们着手签署协议之前,雅虎宣布将对雅虎地图进行重大更新,添加了本地黄页列表。这明显是要建立新的商业模式,在地图上显示周边企业,再围绕它做广告营销。看到这股趋势,红杉决定退出投资,因为他们认为雅虎肯定会胜出,那花钱让这家初创公司去跟巨头搏杀就显得很不明智了。红杉决定退出的同时将这个公司推给了有这方面需求的谷歌。

 

在与 Larry Page 和 Megan Smith 会面后,兄弟俩展示了他们的地图软件 Expedition,这是一个 Windows 应用。Larry 和 Megan 对此表现出浓厚兴趣,但存在两个主要问题:首先,谷歌当时正在准备上市,所有收购交易都被暂时搁置,因为上市的静默期内谷歌无法进行任何收购;其次,谷歌不打算开发桌面软件,他们的目标是专注于 Web 软件。

 

会面结束后,Larry 以那种伟大企业家斩钉截铁地语气说,“我们肯定做得到。”于是,兄弟俩回到澳大利亚,与团队紧密合作了三个星期,将 Expedition 重新构建成可在 Web 上运行的软件。三周后,他们回到 Larry 和 Megan 面前,展示了在浏览器上运行的新版 Expedition。

 

为了让项目登陆网络浏览器,他们使用到微软在 IE 浏览器中大量知名度不太高的 JavaScript 功能,比如将已加载的网页连同存储在服务器端的 XML 数据一同下载。当时大多数网页仍然是静态的,加载网页后就一切结束,页面上不再执行任何处理。可他们的新功能可以在无需刷新的情况下从后台动态获取 XML 数据。这就是未来的趋势,纵观整个 Web 2.0 的历史,一大关键基本就是将以往静态的页面做成动态形式。

 

2004 年 8 月 19 日,谷歌顺利上市,10 月便完成了对 Where 2 的收购。Bret Taylor 成为新团队的首任项目经理,Where 2 团队正式更名为谷歌地图,从此开启了全新的发展篇章

 

用一个周末重写谷歌地图

 

那年夏天,Where 2 努力为产品构建 Web 版本,想要给 Larry 和 Megan 留下深刻印象。谷歌地图随后于 2005 年 2 月发布,当时距离 Web 版本的落地才过去几个月。

 

之所以经常出现这样的情况,是因为当时 Web 应用还是新鲜事物,人们可以比较直观地判断哪些产品更符合市场需求。但无论是第一款优秀的交互式地图软件,还是第一款优秀的交互式社交软件,都有着极大的市场空间。

 

当时的网络速度并不算快,于是人们需要用各种技术手段和奇思妙想做出真正能用的产品。投身这个领域的人并不少,但只有一小部分技术天才能在当时的网络条件下达成目标。当然,这也要感谢当时浏览器技术的迅速发展。

 

虽然谷歌地图发布当天登上了科技媒体的头条,进而获得了可观的流量。但之后它也没有立即成为爆款。根据 Bret Taylor 和不少评论家的说法,谷歌地图在刚上线的头一年里只能说表现还行。当时在功能上明显落后的 MapQues 和雅虎地图仍然占据大部分份额。

 

不过在接下来的一年里,谷歌地图的一项举措真正奠定了其遥遥领先的地位:就是重写了应用程序,解决了速度太慢的问题。谷歌一直也在强调这一点,他们不仅要给出最好的结果,而且要最快给出结果。

 

Gmail 团队的 Paul Buchheit 对此记忆尤深,当时的 Gmail 正处于开发阶段,团队同样在突破 Web 应用程序的能力上限。Paul Buchheit 认为谷歌地图团队的创意和技术路线展现了极高的独立创新能力。据他回忆:

 

Bret 是 Google 地图最初的产品经理。你可能会在 Hacker News 上看到,大家会说“哦,Google 刚刚收购了它并发布了”。但实际上,他们收购的是一个 Windows 应用程序。最初,他们收购的那家初创公司有一个 Windows 地图应用,甚至都不是基于 Web 的。所以,他们将其改成了基于 Web 的。然后,我永远忘不了 Bret 做的一件让我印象超级深刻的事。内部的 Google 地图非常糟糕,它又慢又笨重,就像一个缓慢而笨拙的东西。而负责开发它的人,我猜,他太爱 XML 了。它有太多的 XML 冗余。反正,Bret 对此感到沮丧,在一个周末,他重写了整个 Google 地图的 JavaScript 代码。而且如果我没记错的话,他让它的体积缩小了三分之一,速度提高了 10 倍。他们周一上班时,他直接替换了所有的代码。这就是 Bret 这样的工程师。而且,最重要的是,他的代码质量很高,一点也不粗糙。他可以很快地写出高质量的代码。所以说,他甚至不能算是一个 10 倍工程师,他更像是 100 倍,甚至 1000 倍工程师。他真的太厉害了。

 

Bret Taylor 也回忆说,由于当时团队规模较小,只有四五个人,尽管他是产品经理,但由于团队中没有人非常精通 JavaScript,他不得不兼任 JavaScript 开发的工作。

 

“几乎每个我做过的软件项目,我都会熬夜,因为,嗯,编程嘛。Google Maps 是让我熬夜最多的。”

 

当 Google Maps 启动时,“Web 应用”还是个概念。Google 通过 Gmail 和 Google Suggest 开创了第一批高度互动的 Web 应用。当时,互联网上没有任何资源来做这些事情。“JSON”还不存在。他们用 XML 做所有的数据传输,并在浏览器中解析。那是非常痛苦且缓慢的,但当时没人想到可以利用 JS 对象作为数据传输方式。

 

那段时间,团队经常遇到浏览器崩溃的问题,他们也向 Firefox 团队求助。当时,许多 Firefox 开发者在谷歌工作,他们会和团队一起分析问题,甚至测试浏览器代码库中从未使用过的部分。

 

“所以当他们发现新的 Web 开发技术时,我们最后不得不把应用重写了两三次。我们发现了很多浏览器的 bug,得想办法绕过去。真的很有意思,看看如今 Web 技术是如何发展成像 GraphQL 这样模块化、可扩展的东西。”

 


zack:不太了解过去的 ajax/XML 黄金时代,能有人解释一下为什么 XML 会带来这么多的臃肿吗?

Bret Taylor:曾经 Google Maps 有一个完全功能性的 XSL 转换引擎,用 JavaScript 编写,负责将服务器端的 XML 转换成你在屏幕上看到的内容。那真是太疯狂了。

 

而谷歌地图的原始团队也非常庆幸他们遇到了一位识货的好产品经理。Lars 曾提到,他们在招募 Where 2 团队成员时遇到了巨大的困难。当时团队只有四个人,他们多想招募几位工程师,却始终无法实现,因为大家普遍认为地图项目不可能盈利。即便进入谷歌后,招聘依然困难,因为当时大多数人都认为地图没有商业价值。

 

幸运的是,Bret Taylor 当时正好在从事类似的工作,即“按地理位置进行搜索”功能,他是那个天然的合适人选,能够帮助团队实现这一目标。你得想象,在这种情况下,为这样一支工程师团队加入一个真正出色的且擅长编程的产品经理,对于他们的发布速度和迭代速度起到了多大的作用。

 

“而正如你所说,我最自豪的成就之一就是改变了网络应用程序。当时出现了‘Ajax’这个术语,虽然现在可能不太常用,但它曾风靡一时。甚至我们当时将数据作为 JavaScript 发送的方式,现在被称为 JSON,但当时还没有这个名字。通过在 JavaScript 块上调用 Eval 函数,这种方法非常高效,并最终产生了巨大的影响。”在一次采访中,Bret Taylor 说道。

 

“我非常喜欢 Google Maps,直到今天也是如此。我认为它创造了许多具有交互性的 Web 2.0 公司。许多人都告诉我,他们受到了 Google Maps 和 Gmail 的启发,但实际上还有很多其他因素。谷歌有一群人热衷于技术,这很重要,因为这意味着你可以随时找到同事讨论问题,比如,你是如何解决这个问题的?”

 

“此外,我也很喜欢 Lars 和 Jens 那个愚蠢的 Windows 应用程序,它为我们设定了难以置信的高标准,而我们最终达到了这个标准。”

 

谷歌地图成功了

 

从那时起,重写之后的谷歌地图真正实现了高效和快速。后来的谷歌地球更是引爆了大众的好奇心,人们纷纷想在 Keyhole 提供的卫星图像和航拍画面中找到自己的家。随着种种新功能的发布,谷歌终于在 2006 年超越 MapQuest 和雅虎成为全球最大的互联网地图服务商。2006 年中,他们又发布了谷歌地图 API,这也成为 Web 2.0 开发史上的又一分水岭。当时开发商们疯狂访问这个 API,想要让自己的产品更加丰富。

 

不夸张地说,那时候的谷歌地图就像是 2006 年到 2009 年版的表情包,大家都喜欢各种引用、将其中的数据点添加到自己的产品当中。基于谷歌地图的动态网页和其他功能如雨后春笋,比如 PadMapper 就是做公寓租赁业务的。总之随着 API 的发布,开发商对这种混搭特别关注。于是 Trulia、Zillow 和 Uber 等产品也应运而生。可以说如果没有谷歌地图 API,这一切都不会出现。

 

很长一段时间里,谷歌地图几乎是免费的,这可能是谷歌的业务推广策略。谷歌当时说过,“我们要做的就是让 Web 越来越强大。所以如果大家想用谷歌地图做点探索,那就完全免费。哪怕是频繁使用,成本也不高。”这也是谷歌地图增长的关键策略之一。

 

2007 年,iPhone 发布,谷歌地图和 YouTube 是 iPhone 上仅有的第三方应用。在 2008 年,当 Android 发布时,它也包含了谷歌地图。接着,在 2009 年,当 Android 2.0 更新时,谷歌为 Android 的地图增加了逐路导航功能。终于,2012 年夏天,WWDC(苹果全球开发者大会)发布了 iOS 6,其中一个重要的更新就是推出自己的地图服务——Apple Maps。但此时谷歌地图已经拥有数十亿人,可能是数亿人,正在使用他们的服务,并从中获取所有的数据。

 

从谷歌地图的发展历程中,我们可以看到“产品创意”的重要性,Where 2 的定位不仅仅是 MapQuest 的竞争对手,而是作为一个非常不同的东西,并被工程师们构建出来,让它比 MapQuest 更强大。

 

同时,无论是实现 Web 还是重写,这个产品的实现速度都让人不可思议。但事实证明,很多彻底改变了世界的产品,都是由极具才华的工程师在短短几个月内打造出来的。

 

参考链接:

https://x.com/zack_overflow/status/1855062604244566330

https://www.acquired.fm/episodes/google-maps

https://www.nomorehustleporn.com/my-test-post-12/

https://sourcegraph.com/blog/github-universe/github-universe-liveblog-bret-taylor-quip

 

2024-11-12 10:383463

评论

发布
暂无评论
发现更多内容

荣誉+1,龙蜥荣获“2022年度杰出开源运营团队”奖项

OpenAnolis小助手

开源 InfoQ 运营 获奖 龙蜥团队

3 📖 《JavaScript高级程序设计》__ 语言基础(上)

HoMeTown

JavaScript 前端 读书 js

玩转机密计算从 secGear 开始

openEuler

开源 操作系统 openEuler 机密计算

研发团队绩效考核:Leader 如何做到赏罚分明?

石云升

极客时间 复盘 1月月更 技术领导力实战笔记

使用MTK迁移Mysql源库后主键自增列导致数据无法插入问题

华为云开发者联盟

数据库 后端 华为云 企业号 1 月 PK 榜

NFTScan 与 SeeDAO 孵化器达成战略合作,为开发者提供专业的 NFT 数据服务!

NFT Research

NFT

“低代码+PaaS”的技术创新实践

元年技术洞察

方舟 低代码 数字化转型 低代码平台

如何使用极狐GitLab 机器人大幅提升研发效率

极狐GitLab

项目管理 DevOps 机器人流程自动化 极狐GitLab 研发效率

云原生安全系列 5:ETCD 安全加固

HummerCloud

etcd Kubernetes, 云原生, eBPF

图像增强及运算:局部直方图均衡化和自动色彩均衡化处理

华为云开发者联盟

Python 人工智能 华为云 企业号 1 月 PK 榜

为什么数字化转型需要“低代码”?

元年技术洞察

DevOps 低代码 数字化转型 低代码平台

1 📖 《JavaScript高级程序设计》__ 什么是JavaScript?

HoMeTown

JavaScript #读书 前端‘’

3 📖 《JavaScript高级程序设计》__ 语言基础(下)

HoMeTown

JavaScript 前端 读书 js 前端面试

mysql 中字段的 collate 和 charset 有什么区别

ModStart

eBPF SIG年度动态: eBPF和Wasm深度融合、参与7场活动及2023展望 | 龙蜥 SIG

OpenAnolis小助手

Linux 开源 ebpf 龙蜥社区 sig

运联智库发布2022供应链及合同物流百强排行榜

联营汇聚

声网许振明:RTC 场景 UHD 视频应用和探索

声网

前端 音视频 RTC

2023年1月中国数据库排行榜:OceanBase 持续两月登顶,前四甲青云直上开新局

墨天轮

数据库 opengauss tdsql 国产数据库 polarDB

马蜂窝如何利用 APISIX 网关实现微服务架构升级

API7.ai 技术团队

api 网关 APISIX envoy ingress Kubernetes, 云原生, eBPF

LED显示屏都需要4个配套设施

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

企业的数据存储、处理与分析之道

云布道师

阿里云 云存储

如何打造一个“无需激励”自运转的技术团队?

石云升

极客时间 复盘 激励 1月月更 技术领导力实战笔记

虚拟化技术浅析第二弹之初识Kubernetes

京东科技开发者

云计算 容器 微服务 #Kubernetes# 虚拟化技术

岁末年初捷报频传 HashData斩获多项行业殊荣

酷克数据HashData

数据库·

【Dubbo3 终极特性】「云原生三中心架构」带你探索 Dubbo3 体系下的配置中心和元数据中心、注册中心的原理及开发实战(中)

洛神灬殇

dubbo 注册中心 配置中心 Dubbo3 元数据中心

Pipy 实现 SOCKS 代理

Flomesh

HTTP Service Mesh 服务网格 Pipy 流量管理

证券服务应用评测系列:海通e海通财发布9.0版本,探索证券APP持续提升用户体验

易观分析

App 证券

如何训练开发者记忆能力

SEAL安全

开发者 实用技能 记忆

使用 YonBuilder 进行报表分析 - 扩展篇

YonBuilder低代码开发平台

2 📖 《JavaScript高级程序设计》__ HTML中的JavaScript

HoMeTown

JavaScript 前端 读书 js

MatrixOne入选艾瑞数据库研究报告啦~

MatrixOrigin

分布式数据库 国产数据库 MatrixOrigin MatrixOne 艾瑞咨询

一个周末重写所有代码,性能提升10倍!没有这个100-1000倍工程师,就没有现在的谷歌地图_架构/框架_核子可乐_InfoQ精选文章