Day2: 2022-07-02
主题: 浏览器战争和 JavaScript 的出现
前言
今天重温了一本很古早的书:《JavaScript DOM编程艺术(第2版)》,书的第一章是“JavaScript 简史”,还记得当时看这个章节时一直在吃瓜,现在回想却好像什么都没记住。这种感觉就像二师兄吃人参果,实在是不痛快。为此,我专门整理了下浏览器诞生之初的那些故事。
浏览器发展史
首个 Web 浏览器 WorldWideWeb
1990 年,蒂姆·伯纳斯·李(Tim Berners-Lee)开发出首个 Web 服务器与图形化 Web 浏览器。他将这个进入互联网世界的新窗口,称为 WorldWideWeb,也就是万维网。这是在一台 NeXT 计算机上开发的浏览器,也只能在 NexT 电脑上运行。
NetScape Navigator 的诞生
1993年,网络发展突飞猛进,每个人都需要新的计算机程序来访问网络。这一年,马克·安德森(Marc Andreessen)开发了 Mosaic,这是第一款流行的 Web 浏览器,易于使用且可以在 Windows 计算机运行,让任何拥有 PC 的人都可以浏览早期的网页。
1994年,马克·安德森创建了网景(Netscape)公司,并公开发行了 Netscape Navigator 浏览器(以下简称:NN 浏览器)。 这是第一款面向普通用户的浏览器,一发布就已经占领了浏览器市场占有率的首位,取得了巨大的成功。
Internet Explorer 的追赶
1995年,微软(Microsoft)公司获得了旧版 Mosaic 的代码授权,也就是 NN 原型版本的源代码,稍做修改后就发布了自己的 Internet Explorer 浏览器(以下简称:IE 浏览器)。这一年,微软公司相继推出了 IE 1 和 IE 2,但都几乎没有人使用,直到 1996 年 IE 3 的正式出现,第一场浏览器大战爆发了。
第一次浏览器战争:捆绑发行
从 IE 3 开始,微软强行在所有运行 Windows 操作系统的个人电脑中都内置了 IE 浏览器,这一捆绑发行的操作让 IE 浏览器基本垄断了浏览器的市场,到 1999 年甚至占有了 99% 的市场份额,获得了巨大的胜利。
在这期间,网景想要通过快速增加 NN 浏览器的功能来获取更多的安装量。但是大量新功能的增加,让 NN 浏览器出现了性能下降、bug 频现、软件卡顿等问题,用户不断流失。
1998 年,网景公司以 42 亿美元被收购。
Mozilla Firefox 的浴火重生
网景公司在破产前将 NN 浏览器的核心源代码开源了。
随后,一批老员工成立了非盈利的 Mozilla 的组织,并在 2002 年开发了更轻便、快速、简单与高扩充性的浏览器,这个浏览器在 2004 年被正式命名为 Mozilla Firefox 浏览器,即火狐浏览器。
2009 年,Mozilla Firefox 浏览器迎来了顶峰,市场占有率接近 30%。
2010 年,Mozilla Firefox 浏览器及其他浏览器将 IE 浏览器的市场份额降低到 50%。
而微软公司在 IE 6 发布时认为自己的浏览器技术已经绝对领先,就解散了自己的技术团队。这一操作导致 IE 浏览器的更新迭代速度缓慢,与快速发展的网络环境脱节,不断流失用户。在今年的 6 月 15 日,IE 浏览器也正式关闭,永久地退出了历史的舞台。
Chrome 的辉煌
谷歌(Google)公司和 Mozilla 组织曾在浏览器技术方面互相合作,并在 Mozilla 的技术上再度发展,构建了自己的 V8 引擎。
2008 年,谷歌发布了第一个 beta 版本的 Chrome 浏览器,成为用户心中的新宠。
谷歌公司在推出 Chrome 浏览器之后的十年间,进行了 70 多次更新,不断进行开发和迭代,成为了最受欢迎的浏览器。
大量浏览器的出现
继网景将浏览器代码开源后,谷歌也将浏览器代码开源了。从此,市场上涌现出了大量的浏览器,各大浏览器厂商都在抢占市场占有率。
其他细节
JavaScript 的诞生
1995 年,网景公司为即将发布的 NN 2 浏览器开发了 JavaScript 语言,从而让网站拥有了前所未有的强大计算能力。为了赶上 NN 2 的发布时间,网景公司与 Sun 公司结成开发联盟,合作完成 JavaScript 1.0 的开发。随后,网景又在 NN 3 浏览器的发布中推出了 JavaScript 1.1。
此时,网景公司稳居浏览器市场领导者的位置。微软公司为了追赶,在推出 IE 3 的时候发布了自己的 VBScript 语言,同时以 JScript 为名发布了 JavaScript 的一个版本实现(这个名字是为了避免与网景发生许可纠纷),以此跟上网景公司的步伐。
1997 年,面对微软公司的竞争,网景和 Sun 公司联合欧洲计算机制造商协会(ECMA)对 JavaScript 1.1 语言进行了标准化(标准化一门通用、跨平台、厂商中立的脚本语言的语法和语义)。于是出现了 ECMAScript 语言(ECMA-262),这是同一种语言的另一个名字。
1998 年,国际标准化组织(ISO)和国际电工委员会(IEC)也将 ECMAScript 采纳为标准(ISO/IEC-16262)。
此后,各家浏览器均以 ECMAScript 作为自己 JavaScript 实现的依据。
命名
JavaScript 与 Sun 公司开发的 Java 程序语言没有任何关系。
JavaScript 最开始是一个叫 Mocha (后来改名为 LiveScript )的脚本语言,计划是在客户端和服务端都适用它,它在服务端叫 LiveWire。在 NN 2 浏览器发布前,网景公司将其改名为 JavaScript,这一举动可能是想让它听起来有系出名门的感觉,也可能是想搭上当时媒体炒作 Java 的顺风车,但是这很容易让人们把两种语言混为一谈。
浏览器内核
- Trident 是 IE 采用的浏览器内核,并不完全基于W3C标准开发。
- WebKit 是 Safari 和 Chrome 采用的一个开源 Web 浏览器引擎。
- Gecko 是 NN 6 最开始采用的内核,后来的 Firefox 也采用了该内核作为核心。
标准化 DOM
在浏览器发展的早期,1997 年网景推出的 NN 4 浏览器和微软推出的 IE 4 浏览器都大幅扩展了 DOM,使能够通过 JavaScript 完成的功能大大增加。不幸的是,NN 4 和 IE 4 浏览器使用的是两种不兼容的 DOM。换句话说,虽然浏览器制造商的目标不一样,但他们在解决 DOM 问题时采用的办法却完全不同。
这导致了一种可怕的局面:程序员在编写 DOM 脚本代码时必须知道它们将运行在哪种浏览器环境里,所以在实际工作中,许多脚本都不得不编写两次,一次为 NN,一次为 IE。同时,为了确保能够正确地向不同的浏览器提供与之相应的脚本,程序员还必须编写一些代码去探查在客户端运行的浏览器到底是哪一种,也就是传说中的浏览器嗅探代码。
1998 年,各大浏览器厂商和 W3C 携手完成了 DOM Level 1。标准化的 DOM 是得到有关各方共同认可的 API,可以让任何一种程序设计语言编写的程序和脚本对其进行访问和修改,其独立性和适用性远胜浏览器制造商们推出的各种专有 DOM。
总结
花了点时间梳理了这些故事,除了嘻嘻哈哈,其实还是能看出很多东西,有很多感悟的。比如说:技术最终还是为市场服务的「苦涩」。