引子·乱世之始
时维二〇〇九年,江湖一片混沌。
彼时,有人正在戏院中观看《汉娜·蒙塔娜》大电影,手机嗡嗡震个不停,乃是新下载的相亲应用推来的讯息。最爱的歌手据说明年将发新专辑,最爱的剧集正在改编成电影。闲暇时光,在健身论坛上与人争辩一周究竟有几天,日子过得有滋有味。
然而,一到平日,便须面对那门被誉为"史上最糟糕编程语言"的邪功------JavaScript。
此功臭名昭著,据载,其创始人Brendan Eich仅用十日便草草炮制而出。熟悉此功者皆有一疑:这位前辈莫非第二天就搁笔了?此功被各路浏览器各行其是地解读,毫无标准库,没有模块,没有类。而以此为生者,据说皆是社会底层,不配被人爱戴。
这,便是二〇〇九年的前端江湖。
然而,就在这片泥沼之中,有一个人,悄悄地改变了一切。
此人姓名,今日已鲜有人记------Jeremy Ashkenas。
第一章·下山之始,点石成金
Jeremy彼时供职于Document Cloud,被迫日日与JavaScript为伍,负责一个沉重的客户端应用------此类苦差,在当时颇为罕见。他本是Ruby门下子弟,骨子里嫌弃JavaScript的种种丑陋,据说每日清晨醒来,脑中第一个念头便是......然而他终究没有一走了之。
他选择了另一条路------修复它。
当时,Firefox虽已支持map、reduce、forEach等数组秘法,Internet Explorer却纹丝未动,导致这些招式根本无法在战场上施展。Jeremy遂闭关打造Underscore.js------一条装有约六十种辅助函数的百宝腰带,专治数组与对象的各般疑难杂症。
此举听来平淡,然在当年,前端开发之苦,犹如赤手攀岩。Underscore的出现,据传令数位苦苦挣扎于Golden Gate桥边的程序员,终于打消了轻生的念头。
Underscore声名大噪,其诸多绝招,后来被JavaScript本身一一吸收,方才退出历史舞台。然而功成身退,本是宗师气度。
第二章·另立门户,铸造新语
Underscore不过是Jeremy下山的第一步。
他很快意识到,修补一门腐朽的语言,终究是治标不治本。既然JavaScript标准委员会与各大浏览器厂商皆是慢吞吞的老爷们,不如自己另起炉灶,创造一门全新的语言,编译成JavaScript,将那些丑陋的部分永久封存于Brendan当年熬了十天的那间发霉小屋里。
于是,CoffeeScript问世。
须知,彼时JavaScript之陋不止于此:没有类,继承须靠摸索一个名为prototype的隐藏对象,手动挂载属性;声明变量有着诡异的作用域规则,会偷偷将声明提升至函数顶部,令人猝不及防;==与===的分别,无人在意,类型强制转换悄悄发生;就连定义一个简单的函数,也得老老实实写上function这个冗长的词。
CoffeeScript将这些陋习一扫而空,以简洁优雅的语法,还前端开发者一片清明。
大侠DHH慧眼识珠,几乎一夜之间便将其收入麾下。二〇一一年,CoffeeScript随Rails 3.1发布,成为默认的JavaScript预处理器------自此,天下所有新建Rails应用的前端,皆以CoffeeScript写就。GitHub、Dropbox以及那个年代一众创业新秀,纷纷奉此为圭臬,历数年之久。
然而,宗师之作,注定难逃同样的命运。JavaScript终于在标准层面引入了箭头函数、类、默认参数、展开运算符、字符串插值、解构赋值......这些,无一不是CoffeeScript早已示范过的招式。CoffeeScript就此功成隐退,江湖上再无其身影。
今日,每当你的AI智能体信手写出一个箭头函数、一个解构赋值,请记得------那背后,有一个叫Jeremy的人,早在十五年前便已铺好了路。
第三章·结构之战,天下归心
然而,Jeremy仍未罢手。
彼时,JavaScript已有了标准库,有了优雅的语法,然而一旦面对真正庞大的客户端应用,仍是一团乱麻------数据、DOM操作、事件处理相互缠绕,万行意大利面条,无从理清。
二〇一〇年,Jeremy祭出第三件神兵:Backbone.js。
此库不足两千行,却首次为前端开发者带来了MVC架构的真正滋味:Model管数据,Collection管模型群,View管渲染,事件系统令一切自动保持同步,无需手工串联。
自此,构建一个严肃的客户端应用,不再是以卵击石。
Trello、Airbnb、Hulu、Pinterest的早期版本,皆以Backbone为骨架。二〇一一至二〇一四年间,凡是认真对待前端的JavaScript开发者,手中几乎无不握有这把剑。
后来,Angular、Ember相继崛起,React最终一统江湖,Backbone渐被取代。然而那些取代它的人,皆是站在它的肩膀上。是Backbone,第一次向世人证明:客户端重型应用,不是梦。
尾声·无名宗师,功在千秋
忘记旧日之苦,容易。忘记那些修补了苦的人,更容易。
Jeremy Ashkenas,三器护身------Underscore、CoffeeScript、Backbone------在最混乱的年代,以一己之力,为JavaScript的浴火重生点燃了最初的火种。
现代前端的万丈高楼,地基之中,有他默默砌下的砖石。
然而江湖如此,功成之日,便是被遗忘之时。
如今提及JavaScript历史,人们口中是Brendan的传说,是TC39的宫斗,是React的荣光------却鲜有人记得,有一个叫Jeremy的人,早在众人绝望之时,已独自撑起了这片天。
宗师之名,不在庙堂,不在史册。
在每一行你今日写下的代码之中。