写点什么

浏览器大战与 JavaScript 的诞生

2019 年 7 月 30 日

浏览器大战与JavaScript的诞生

“只要应用能用 JavaScript 编写,那么最后它就会用 JavaScript 编写。”——Atwood 定律,出自 Jeff Atwood 的一篇题为“最小权力原理”的博客文章,2007 年 7 月 17 日


浏览器大战

在 Android 设备或 iPhone 流行之前,浏览器大战的战场是桌面计算机平台。众多公司投入了数十亿美元投身这场战役,而他们的出发点就是基于这样的一个假设:谁统治了桌面浏览器市场,谁就将统治整个互联网。如今,所有网站的全部流量有将近一半来自移动设备;但在 20 世纪 90 年代,网络上的几乎所有活动都是来自台式机的,而绝大多数台式电脑都运行着某个版本的微软 Windows 操作系统。


Netscape 称霸的岁月

在浏览器领域,网景通讯公司(Netscape Communications Corporation)取得了先发优势。他们构建了 Netscape Navigator 浏览器,让数以百万计的用户第一次迈入了互联网世界的大门。Netscape 一度拥有超过 80%的市场份额,但他们也不乏竞争对手。当时 IBM 有一个 OS/2 浏览器,Oracle 则拥有与 Netscape 兼容的 Powerbrowser,其中包含一种称为数据库标记语言的东西。当然,Netscape 的最大威胁来自占据全球台式机操作系统 80%以上份额的企业:也就是微软公司。


在战略层面上,Netscape 意识到我们要跨越静态网页时代才能发挥 Web 的全部潜力。就算这些网页是由 Web 服务器上的 CGI 脚本动态创建的,但一旦它们到达浏览器后页面就不会改变了。如果你想要查看页面的修改版本,哪怕是一丁点改动也必须将请求发送回服务器并等待响应。从复杂程度来说,Web 浏览器感觉很像是一个连接到大型机的哑终端。Web 开发人员需要的是一种可以在浏览器中运行的编程语言,利用台式机的处理能力为用户提供更丰富的体验。


所以在 1995 年微软步步紧逼的背景之下,Netscape 决定迈向未来,创造开发人员需要的这种语言。Netscape 首席执行官 Jim Clark 召来了一位名叫 Brendan Eich 的天才程序员,后者的构想是在浏览器中实现 Scheme 编程语言。Scheme 在学术界广受欢迎,但在市场上并没有太大的吸引力。Eich 认为它可能非常适合网页编程。后来他将 Scheme 称为“令我心动的那种美丽的研究语言”。


但事情还有点复杂:Netscape 已经从 Sun Microsystems 获得了 Java 许可。彼时人们认为 Java 才应该是浏览器使用的语言。不幸的是,Java 对于当时主流的低速网络来说太沉重了。开发人员必须编译他们的代码,然后将代码提供给浏览器。如果你的代码和用户在其机器上使用的 Java 版本不一样,那就自求多福吧。这意味着用户需要耐心地通过在今天看来极为缓慢的连接下载体积足有 10 MB 或更多(!)的 Java 虚拟机。那时一个网页及其包含的所有非 Java 内容可能不超过几百 KB;运行 Java 的开销太大了。


相比之下,Eich、Netscape 的 Marc Andreessen 以及 Sun 的 Bill Joy 都认为这个世界需要一种类似BASIC的语言,这样的语言非常适合连编译器是什么都不知道的开发人员。难道创建网页的开发者必须了解 public static void main(String[] args)的含义吗?Eich 不这么认为。


于是他们决定创建一种新的编程语言,并在 Netscape Navigator 2.0 中发布。作出这个决定的那天离发布只剩十天了。Eich 只用了 10 天时间就创建了 LiveScript,后来它改名为 JavaScript。(正如他多年后回忆的那样,“我就没睡过什么觉。”)一夜之间,开发人员就可以为他们的网页添加逻辑了。更棒的是这种语言直接与 Web 开发人员想要使用的东西(包括页面 HTML 内容的文档对象模型(DOM)和浏览器窗口本身等对象)联系在一起。如果你想浏览并使用页面的文档结构,用 JavaScript 就可以轻松完成任务。如果你想调整窗口大小或移动窗口,或打开一个新窗口,JavaScript 都能轻松实现。


IE 为无名小卒

下面这段关于人类傲慢与自大的故事来自我个人的经历:1996 年 3 月,我在旧金山参加第一届Netscape开发者大会。当时一位年轻的,穿着 Zegna 的百万富翁(我记不住他的名字了)作了一次演讲,告诉听众大家可以为 Netscape Navigator 写代码…“但如果你想照顾其他百分之三的互联网用户,那还可以考虑 Internet Explorer。”很多听众听到这里都笑了。


反败为胜,IE 成主角

之后的一周时间里,我留在旧金山参加微软专业开发者大会,就是在那次会议上比尔盖茨和他的微软公司终于开始理解互联网了。如果你有时间的话,请回盖茨的主题演讲。不夸张地说,那次演讲真的改变了我们生活的世界。演讲内容包括游戏演示、虚拟现实和最先进的网页设计等,所有内容看起来都很滑稽。还有一个演示最后在几千人面前以蓝色崩溃界面告终;但档案里好像没记载这次失败。(没别的意思,我们都是程序员,也都见过这类事情。只不过我们可能没有过在史上最富有的老板面前搞砸这种经历。)


在那次展会上微软宣布了一个全方位计划,使其产品线中的所有内容都以某种形式支持互联网。这是他们对 Netscape 商业模式持续打击计划的火力升级。1996 年底,Netscape Navigator 还有 80%的市场份额,维持49美元的定价。(是的,你必须付钱才能获得浏览器。请与你的爷爷奶奶讨论当时的情况。另外也可以问问他们“拨号”是什么意思。)但微软这边,不仅 Windows 会附送免费的网络浏览器,而且微软还免费提供了一款 Web 服务器。不幸的是,到头来 Internet Explorer 与 Netscape 等浏览器并不能完全兼容,其后果在长达 15 年或更久的时间内波及了地球上每一位 Web 开发人员。


不管怎么说,我离开旧金山后就认为 Netscape 根本不知道自己面临的是怎样的威胁。同时我还确信Virtual Bubble Wrap这款基于 Flash,运行在 Netscape Navigator 中的游戏是互联网史上最出色的成果。我觉得这两个判断都是正确的。


小语言,做大事

20 多年过去了,Netscape 早已消逝在了历史的长河中,那么为什么我们还在谈论 JavaScript 呢?首先,它在客户端取得了巨大成功。在 1996 年,如果你是一名想要编写交互式网页的 Web 开发人员,那么你必须学习 JavaScript。在 2019 年,如果你是一名想要编写交互式网页的 Web 开发人员,那么你还是必须要学习 JavaScript。然而,90 年代中期的第一个脚本网页并不是创新的结束,相反它只是一个开始。


随着谷歌地图等应用发展出全新的交互需求,JavaScript 的影响力更加突出了。在过去,地图网站向你展示的是一个静态的世界观。如果你想要查看地图的另一部分(缩小、放大、向北/向西/向南/向东移动等),就需要单击按钮并等待服务器向你传送其他地图数据。相比之下,谷歌地图使用 JavaScript 预取你可能想要查看的其他地图数据。如果你向某个方向滚动,地图会立即自动显示。静态地图需要在每次操作时同服务器往返数据,所以很快就被淘汰了。


服务端 Node.js 的诞生巩固了 JavaScript 的主导地位。最起码,它使 Web 开发人员能够将他们的 JavaScript 技能从客户端带到服务器上。结合将函数作为对象(回调)传递的能力,Node.js 的事件循环推广了一个全新的编程模型。一夜之间,你只用几行代码就能编写一个 Web 服务器了。


随后 Node 包管理器(npm)崛起,开发者用 npm 来管理依赖关系意味着一个非常小的应用程序可以利用其他包来做非常复杂的事情。吹一下我自己的例子吧,Coderland Compile Driver中的knative-proxy包只需要不到 40 行代码就能处理 HTTP POST 和 OPTIONS 动作。我写这个包才用了差不多半小时。


JavaScript 是一种简洁而朴实无华的语言,它触及了你生活的每个角落。只要关掉浏览器的 JavaScript,就能看到有多少 Web 内容无法正常工作了。(关于这是好事还是坏事的哲学争论就留给读者思考了。)无论你在何处,以何种方式使用互联网,Brendan Eich 在那 10 天里不眠不休的工作成果都是计算史上最重要的一次冲刺。你不一定要喜欢 JavaScript,但如果你以 Web 开发为生就必须学习它。


英文原文:https://developers.redhat.com/blog/2019/07/23/the-browser-wars-and-the-birth-of-javascript/?sc_cid=701f20000012i69AAA


2019 年 7 月 30 日 18:491812

评论

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

作业 - 第三周

Happy-Coming

看完这篇 HashMap,和面试官扯皮就没问题了

cxuan

Java 源码分析

如何学习设计模式

elfkingw

极客大学架构师训练营

腾讯健康码16亿亮码背后的Elasticsearch系统调优实践

小小的一朵云

大数据 elasticsearch

Apache Zeppelin:可能是开源届最好的Flink开发平台

章剑锋_Jeff

大数据 flink 流计算 Zeppelin

设计模式代码实现

dony.zhang

手写一个单例

Acker飏

极客大学架构师训练营

Kotlin实现组合模式

Acker飏

极客大学架构师训练营

Linux性能优化实战-第一天学习

程序员老王

c++ 性能调优

架构师训练营 - 作业 - 第三周

心在飞

极客大学架构师训练营

是时候扔掉 Postman 了,Apifox 真香!

狐哥说技术

Postman 面向接口编程 Apifox 接口文档 接口测试

架构师训练营第三周作业

好名字

作业

老板不断加需求、改需求的四种应对方法

金刚小书童

项目管理 需求管理

KairosDB Client使用总结

刘先强

设计模式与敏捷开发

架构师 架构是训练营

读懂一个 demo,入门机器学习

陈东泽 EuryChen

人工智能 tensorflow 学习 AI

冒泡排序

wjchenge

冒泡排序

新基建核心技术人才缺口将达420万

CECBC区块链专委会

新基建 人才缺口 核心技术人才

锦囊篇|一文摸懂Glide

ClericYi

漫画通信:有了它,终于可以放心买买买了

阿里云Edge Plus

云通信 短信 语音 通信云

架构师训练营 - 第三课作业 -20200624- 单例及组合模式

👑👑merlan

架构设计 极客大学架构师训练营

week03 架构师培训营总结

李锦

数据库周刊29│2020数据库研究报告;Oracle取消今年技术大会;腾讯云DBbridge发布支持一键迁库;饿了么迁至阿里云;PG数组查询;Oracle被比特币勒索;DM8 安全管理…

墨天轮

MySQL 数据库 postgresql 腾讯云 阿里云

几种设计模式的使用场景

Acker飏

极客大学架构师训练营

架构师训练营——第三周作业

jiangnanage

关于区块链的那些事,看完可以防忽悠

CECBC区块链专委会

分布式 区块链技术 共识与信任

拍一拍,微信史上最短一行代码,是如何被网友玩坏的!

程序员生活志

c++ 微信

架构师训练营第 3 周作业

在野

极客大学架构师训练营

macOS Big Sur、iOS14测试版描述文件

Winann

iOS14 macOS Big Sur 描述文件

week03 单例作业以及组合模式

李锦

极客大学架构师训练营

命题作业—第三周

于江水

极客大学架构师训练营

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

浏览器大战与JavaScript的诞生-InfoQ