JS的历史

作者: 火锅伯南克 | 来源:发表于2019-01-28 15:13 被阅读27次

    一、Nombas 和 ScriptEase

    大概在 1992 年,一家称作 Nombas 的公司开发了一种叫做 C 减减(C-minus-minus,简称 Cmm)的嵌入式脚本语言。Cmm 背后的理念很简单:一个足够强大可以替代宏操作(macro)的脚本语言,同时保持与 C (和 C ++)足够的相似性,以便开发人员能很快学会。这个脚本语言捆绑在一个叫做 CEnvi 的共享软件中,它首次向开发人员展示了这种语言的威力。

    Nombas 最终把 Cmm 的名字改成了 ScriptEase,原因是后面的部分(mm)听起来过于消极,同时字母 C “令人害怕”。

    二、Mosaic

    1992 年浏览器中大部分是单纯的 HTML 查看器,用户还需要依靠外部辅助应用程序来查看图片等富媒体内容。真正让大家眼前一亮的产品是 Mosaic,第一个可以显示图片的浏览器。这是美国国家超级电脑应用中心(NCSA)在 1993 年开发的一款适用于多平台的网页浏览器,Mosaic 是第一个被人普遍接受的浏览器,它让许多人了解了Internet 。它的技术随后被授权给了多家公司,于是,商业公司们也可以基于其上开发新产品了。

    在这些商业公司里,最值得注意的一家叫网景。还有一家,叫微软

    Mosaic浏览器

    三、Netscape 和 JavaScript(LiveScript)

    1994年Mosaic研发的核心成员马克·安德森(Marc Andreessen)和几何图形发生器的发明人吉姆·克拉克(Jim.H.Clark)共同创立了Mosaic Communication Corporation。同年11月为了避免与NCSA的法律纠葛,公司更名为Netscape Communication Corporation即网景公司,并一直沿用。

    二人试图打破Mosaic的垄断并取得业界的领导地位。所以研发了一款新浏览器,名为 Netscape Navigator,即“导航者”。对内其1.0版本的研发代号则为Mozilla!网景公司员工也常将其称作Moz或Mozzie。


    网景开发的浏览器
    当 Netscape Navigator 崭露头角时,Nombas 开发了一个可以嵌入网页中的 CEnvi 的版本。这些早期的试验被称为 Espresso Page(浓咖啡般的页面),它们代表了第一个在万维网上使用的客户端语言。而 Nombas 丝毫没有料到它的理念将会成为万维网的一块重要基石。

    JavaScript的雏形出现了。

    注意,是Nombas

    随着网上冲浪越来越流行,对于开发客户端脚本的需求也逐渐增大。此时,大部分因特网用户还仅仅通过 28.8 kbit/s 的调制解调器连接到网络,即便这时网页已经不断地变得更大和更复杂。而更加加剧用户痛苦的是,仅仅为了简单的表单有效性验证,就要与服务器进行多次地往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了 30 秒的处理后,看到的却是一条告诉你忘记填写一个必要的字段。

    那时正处于技术革新最前沿的 Netscape,开始认真考虑开发一种客户端脚本语言来解决简单的处理问题。

    当时工作于 Netscape 的 Brendan Eich (布兰登·艾奇),开始着手为即将在 1995 年发行的 Netscape Navigator 2.0 开发一个称之为 LiveScript 的脚本语言,当时的目的是在浏览器和服务器(本来要叫它 LiveWire)端使用它。Netscape 与 Sun 共同完成 LiveScript 实现。
    Brendan Eich (布兰登·艾奇)

    布兰登·艾奇(生于1961年7月4日),美国技术专家和JavaScript 编程语言的创作者。他共同创办了Mozilla的项目的Mozilla基金会和Mozilla公司,并担任Mozilla公司的首席技术官,并简要的首席执行官。他是Brave Software的首席执行官。

    他于1995年4月开始在Netscape Communications Corporation工作.Eich最初加入了打算将Scheme “放入浏览器”,但他的Netscape上司坚持认为该语言的语法要类似于Java,因为网景公司的整个管理层,都是Java语言的信徒,而且网景公司以与Sun公司结成联盟,当时的Sun已经把Java成功地推向了市场。

    但是,布兰登·艾奇对Java一点兴趣也没有。为了应付公司安排的任务,他只用10天时间就把Javascript设计出来了。
    由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。如果Brendan Eich预见到,未来这种语言会成为互联网第一大语言,全世界有几百万学习者,他会不会多花一点时间呢?

    总的来说,他的设计思路是这样的:
    1.借鉴C语言的基本语法;
    2.借鉴Java语言的数据类型和内存管理;
    3.借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
    4.借鉴Self语言,使用基于原型(prototype)的继承机制。

    如果不是公司的决策,Brendan Eich绝不可能把Java作为Javascript设计的原型。作为设计者,他一点也不喜欢自己的这个作品:
    "与其说我爱Javascript,不如说我恨它。它是C语言和Self语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。' (the part that is good is not original, and the part that is original is not good.)"

    就在 Netscape Navigator 2.0 即将正式发布前,Netscape 将其更名为 JavaScript,目的是为了利用 Java 这个因特网时髦词汇。Netscape 的赌注最终得到回报,JavaScript 从此变成了因特网的必备组件,网景也得到了物质回报。

    1995年8月9日,公司首次公开募股获得巨大成功。原本股票价值,为每股14美元,但因这个临时决定,股价倍增至每股28美元。第一天收市,股价升至每股75美元,几乎是当时创记录的“首日获利”。1995年,该公司的收入每季上升一倍。

    四、微软 和 JScript

    一直到 1995 年中,市场上的网页浏览器标准都以 Netscape 主导,没公司相争,也没公司想争。
    随着网景的发展,它已多次尝试创做一种能够让用户通过浏览器操作的网络应用系统。这引起微软注意,担心网景可能威胁到微软的操作系统和应用程序市场。

    这个就类似于微信客户端是苹果手机的一款应用,但是微信自己还搞了一个内置应用——小程序,这会直接影响苹果商店的应用使用问题,苹果当然会很警惕,只不过在这次较量中微信的头比苹果的硬而已。

    微软是第一个破局者。微软作为IT界老大,看到JavaScript 1.0 如此成功必然心里不舒服,于是在1995年买下Mosaic的授权,在获取 Mosaic 的授权后,微软迅速推出了 Internet Explorer 1.0,并于 1995 年 8 月起通过“Windows 95 Plus ! ”搭配出售。

    但是我们要清楚一点,微软最初的商业侧重点并不是互联网,而是PC 操作系统这块市场,到底是谁给了微软这么大的决心,要和几乎已经在浏览器市场坐稳的网景公司“背水一战”?

    是比尔盖茨。


    威廉 · 亨利 · 盖茨三世

    1995 年 5 月 26 日,比尔盖茨向微软内部所有员工发送了一份名为“互联网潮汐”的备忘录。在备忘录里,盖茨明确表示,他打算集中公司所有的技术力量,all in 互联网。

    盖茨在这份备忘录里发出警示:“互联网用户聚集在一起,也许会创造出比 PC 更有价值的东西。目前我不认为我们的产品可以做到,不过,我们已经找到了一个出生在互联网上的对手,Netscape,它是我们必须要打败的。”

    备忘录内容:

    我们可以对过去 20 年的愿景做个简洁的概括,我们看到计算机功能发生了指数级的改进,这使得优秀的软件变得越来越有价值。对此,我们的回应是,建立一个足以提供最佳软件产品的系统。

    我们相信,在未来 20 年,计算机将对工作、学习和游戏产生根本性的影响。而出色的软件产品对于实现这些进步至关重要。

    大多数用户没有预判到未来通信价格将大幅下降。当前的有线电话网络仍在使用旧技术。PC 刚刚开始创造出额外的需求,这将推动一股新的投资浪潮。扩张的互联网,新的应用程序和更优质的宽带网络,将在未来十年内为大多数企业和家庭带来低成本的通信。

    我认为,未来几年互联网的发展将在很长一段时间内决定整个行业的方向。现在我为互联网分配了最高级别的重要性。我想明确指出,我们对互联网的关注是第一位的。

    自从 IBM 在 1981 年推出 PC 以来,互联网就开始有了巨大的转变。当前的电脑并不完美,个人的体验是相当差的。但是随着 PC 性能的增强,整个行业将找到新的机会。

    互联网的独特地位源于多种要素。TCP / IP 协议很重要,因为是它支持了分布式计算,并且让整个网络得到非常好的扩展性。也许未来地球上的每个人都能连接起来,服务器可能需要承载巨大的流量。

    关于超文本的预测,几十年就有了,而且部分预测已经实现。我相信,带扩展名的页面将成为定义信息呈现方式的新标准。HTML 的各种扩展,包括表格、安全交易等功能将在不久的将来得到广泛采用。也许还能有 3D 展示以支持 VR 购物和社交。

    互联网的另一个独特之处在于,它允许我们以商品的交易方式购买通信线路,通信线路的连接构成了“公共”网络,而“公共”网络的经济性反映了通信技术的进展情况。

    企业连接到互联网的成本取决于你进入互联网的“入口”的大小,而不是实际使用的程度。这意味着,额外使用的边际成本几乎为零。

    最重要的是,互联网可以成为一个发布内容的场所。它有足够的用户,它能从这些用户所贡献的内容的正反馈循环中获益,获得的用户越多,带来的内容就越多,反过来会带动更多用户的加入。

    当然,关于未来互联网的增长,我认为一个重要问题在于它的“临界质量”。现在我们看到,每种在线服务都可以为互联网增加额外价值。我们需要让它的整体价值不断凸显,以吸引用户克服成本考虑,真正地加入进来,让互联网达到爆发增长的“临界质量”。

    我们对这个“临界质量”没有足够明确的答案。但我们能做的是,使各项互联网服务非常,非常便宜——也许是免费的。
    我关注到两个现象:

    第一,在浏览互联网的过程中,我几乎找不到 Microsoft 能够支持的文件格式。我用了超过 10 个小时,但是没看到单个 Word 文档,AVI 文件,Windows .EXE 或我们能够支持的文件格式。不过我看到了大量的 Quicktime 文件。所有电影制片厂都使用它们来提供电影预告片。可那是属于苹果公司的。

    第二,Internet上另一种流行的文件格式是 PDF,甚至美国国税局也提供 PDF 格式的税表。目前来看 HTML 还有些局限,所以 PDF 是一种标准化的替代方案。Adobe 正在大力投资这项技术。

    Quicktime 和 PDF 在网络上很受欢迎,因为它们是跨平台的,读者可以免费获取。一旦这样的格式建立起来,新格式将很难出现(或者变得同样受欢迎)。

    我发现,出生于互联网上的一个竞争对手是 Netscape。他们的浏览器占主导地位,拥有 70% 的份额。他们正在寻求一种多平台策略,将关键 API 存放到客户端,以使底层操作系统“商品化”。他们吸引了许多公共网络运营商使用他们的平台提供信息和目录服务。我们必须击败他们。

    下一步我们有很多工作要做。如何协调?我的设想是,Paul Maritz 将领导平台化业务,确保 Windows 系统是互联网用户的最佳选择。这是我们的护城河。Nathan 和 Pete 将领导应用程序和内容小组,弄清楚如何通过为互联网提供应用程序和内容来赚钱。

    关于未来,我认为我们已经具有相当大的优势,最主要的是我们的团队,以及 Windows 和Office 被用户广泛接受。我相信当我们进入互联网业务并且尝试扩展的时候,会有很多不确定性。它会是一股改变了原先规则的潮流,对我们来说,这既是机会,也是挑战。

    三个月后,IE 2.0 正式上线,网景和微软的战争就此真正开始。

    随后,1996年8月13日,微软IE3发布。IE 3.0 搭载了一个 JavaScript 的克隆版,叫做 JScript(这样命名是为了避免与 Netscape 潜在的许可纠纷)。微软进军浏览器市场,双方激烈竞争就此展开。网景公司的Netscape Navigator与微软公司的Internet Explorer之间的竞争,后来被称为“浏览器大战”。
    浏览器大战

    网景和微软的员工不仅暗地里牟足了劲,明面上也剑拔弩张。

    1997 年 10 月,IE 4.0 正式推出,微软在旧金山举行产品发布会,竖起了一个 10 尺长的巨型“e”标志。

    第二天早上,Netscape 的员工们惊讶地发现,这个标志跑到了自家的草坪上,而且上面赫然写上了来自对手的挑衅:“We Love You,From the IE team”。

    这让 Netscape 十分愤怒,他们立刻上前一把推翻对手的标志,然后摆上自己的恐龙吉祥物把微软标志踩在脚下。而且,恐龙手上拿了一个展板,上面写着“Netscape 72, Microsoft 18”(代表当时“ IE 弱 Netscape 强”的市场格局)。

    这种小事只是插曲。随着 IE 4.0 的推广,微软越战越猛,而网景颓势渐显。


    微软步入 Web 浏览器领域的这重要一步虽然令其声名狼藉,但也成为 JavaScript 语言发展过程中的重要一步。

    五、三足鼎立 与 标准化

    在微软进入后,有 3 种不同的 JavaScript 版本同时存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase。与 C 和其他编程语言不同的是,JavaScript 并没有一个标准来统一其语法或特性,而这 3 种不同的版本恰恰突出了这个问题。随着业界担心的增加,这个语言的标准化显然已经势在必行。

    1997 年,JavaScript 1.1 作为一个草案提交给欧洲计算机制造商协会(ECMA)。

    第 39 技术委员会(TC39)被委派来“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义”(http://www.ecma-international.org/memento/TC39.htm)。由来自 Netscape、Sun、微软、Borland 和其他一些对脚本编程感兴趣的公司的程序员组成的 TC39 锤炼出了 ECMA-262,该标准定义了名为 ECMAScript 的全新脚本语言。

    在接下来的几年里,国际标准化组织及国际电工委员会(ISO/IEC)也采纳 ECMAScript 作为标准(ISO/IEC-16262)。从此,Web 浏览器就开始努力(虽然有着不同的程度的成功和失败)将 ECMAScript 作为 JavaScript 实现的基础。

    六、ECMAScript

    ECMA-262第 1 版(1997年6月)本质上与 Netscape 的 JavaScript 1.1相同——只不过作了一些较小的改动:

    1. 删除了所有针对浏览器的代码。
    2. 支持 Unicode标准(从而支持多语言开发)。
    3. 对象与平台无关(Netscape JavaScript 1.1的对 象在不同平台中的实现不一样,例如 Date 对象)。

    这三条规则奠定了JavaScript的可移植性,比如现在比较火爆的node.JS,是一门服务端语言。试想一下如果JavaScript的特性与特定的浏览器绑定的话,前端将是多么混乱的世界。所以,站的高度不同,分析问题的角度,解决问题的角度也会不同,这就是传说中的格局?

    这也是 JavaScript 1.1和 1.2与 ECMA-262第 1版不一 致的主要原因。

    ECMA-262第 2 版(1998年8月) 主要是编辑加工的结果。这一版中内容的更新是为了与 ISO/IEC-16262保持严格 一致,没有作任何新增、修改或删节处理。因此,一般不使用第 2版来衡量 ECMAScript实现的兼容性。

    ECMA-262第 3 版(1999年12月)才是对该标准第一次真正的修改。修改的内容涉及字符串处理、错误定义和数 值输出。这一版还新增了对正则表达式、新控制语句、try-catch 异常处理的支持,并围绕标准的 国际化做出了一些小的修改。
    从各方面综合来看,第 3版标志着 ECMAScript成为了一门真正的编程 语言。

    ECMA-262第 4 版对这门语言进行了一次全面的检核修订。由于 JavaScript在 Web 上日益流行,开 发人员纷纷建议修订 ECMAScript,以使其能够满足不断增长的 Web 开发需求。作为回应,ECMA TC39 重新召集相关人员共同谋划这门语言的未来。结果,出台后的标准几乎在第 3版基础上完全定义了一门 新语言。

    第 4版不仅包含了强类型变量、新语句和新数据结构、真正的类和经典继承,还定义了与数据 交互的新方式。 与此同时,TC39下属的一个小组也提出了一个名为 ECMAScript 3.1的替代性建议,该建议只对这 门语言进行了较少的改进。这个小组认为第 4版给这门语言带来的跨越太大了。因此,该小组建议对这门语言进行小幅修订,能够在现有 JavaScript引擎基础上实现。

    这也是为什么我们查阅的有关JavaScript资料时,从来没看到过在第四版定义过什么属性或者方法,都是在ES3、ES5中定义的,但也不能说ES4就是废弃物了,现在流行的ES6的原型就是ES4。

    终,ES3.1附属委员会获得的支持超过 了 TC39,ECMA-262第 4版在正式发布前被放弃。

    ECMAScript 3.1成为 ECMA-262第 5版,并于 2009年 12月 3日正式发布。

    ECMA-262第 5 版(2009年12月)力求澄清第 3 版中已知的歧义并增添了新的功能。新功能包括原生 JSON对象(用于解析和序列化 JSON数据)、继 承的方法和高级属性定义,另外还包含一种严格模式,对 ECMAScript引擎解释和执行代码进行了补充 说明。

    如今ECMAScript已经出到第8版了

    七、鹿死谁手?

    这是一场从一开始就不公平的对决。

    微软始终拥有两大优势:
    第一,财力雄厚。Netscape 浏览器虽然一度达到 90% 以上的占有率,但网景公司规模不大,加上只有浏览器及相关产品,总收入拍马也赶不上微软。
    第二,Windows 早就垄断了操作系统市场。就算 IE 在早期的评价不如 Netscape,微软只要把 IE 和 Windows 捆绑销售,就可以迅速提升市占率。再加上 IE 的免费政策,只要等到 IE 产品功能和 Netscape 差不多了,大多数用户自然会逐渐放弃 Netscape,转向 IE。

    凭借这两个优势,微软的策略也是妙招不断:
    1、切断 Netscape 财源。既然 Netscape 通过销售服务器软件来发布浏览器赚钱,那么微软也开发类似的产品,而且专门往便宜了卖,积极开打价格战。
    2、看重市场推广。在授权 Windows 给其他主机厂商的时候,微软要求对方必须在桌面展示 IE 的图标,不能加入 Netscape,否则就以涨价威胁。
    3、统一战线。把中小型 ISP(网络提供商)、电信运营商都拉入战局,要求他们以 IE 作为主接口,鼓励用户改用 IE 浏览器。
    4、布局产业上下游。积极收购知名网页设计工具(比如 FrontPage),故意加入非标准的专属标签,使得作出的网页只适用于 IE 浏览器。

    这些手段刀刀命中要害,再加上网景后来在商业决策上犯了错,Netscape 终于在 1998 年年底被 IE 击败。

    至此,网页浏览器之争的第一阶段落下帷幕,美国在线(AOL)以 42 亿美元收购网景业务为这场战争划下终点。再往后,IE 逐步成为浏览器市场的霸主,其份额最高达到 2002 年的 96%,比 Netscape 的顶峰还高。

    面对微软的强大威胁,Netscape在1998年11月决定将软件免费、且公开所有的程序源码,将主要力量放在商业市场。这个措施几乎还没来得及实施, Netscape就被AOL美国在线所收购。

    不过,AOL并非是想开发浏览器同微软的IE竞争,而是将它作为对微软的反垄断案的一个筹码。之后, Netscape虽然陆续发展出4.X、6.X系列乃至7.X系列,但都毫无影响力可言。

    微软与AOL的反垄断官司在2003年5月完结, Netscape项目在7月份就被AOL冻结并将大部分Netscape 开发人员解雇,到此为止属于Netscape的时代就完全结束了。

    不过AOL还是作了一件好事,所有的Netscape原始代码被送给开源社群自行开发,同时协助成立了非盈利性的“Mozilla基金会(Mozilla Foundation)”,它也是现在Firefox浏览器的管理和推进组织。

    现在很多的浏览器都是以之为雏形开发设计的。为了向其致敬,chrome、safari等浏览器代码里都有Browser name: Netscape。

    八、可喜可贺

    到了 2008年,五大主流 Web 浏览器(IE、Firefox、Safari、Chrome和 Opera)全部做到了与 ECMA-262兼容。IE8是第一个着手实现 ECMA-262第 5版的浏览器,并在 IE9中提供了完整的支持。Firefox 4也 紧随其后做到兼容。下表列出了 ECMAScript受主流 Web 浏览器支持的情况。


    IE也有他功绩的一面
    1、IE4 中率先使用了ajax的模式,写法为 new ActiveXObject("Microsoft.XMLHTTP");
    2、IE8 是第一个实现 Object.defineProperty()方法的浏览器版本。然而,这个版本的实现存在诸多限制:只能在 DOM对象上使用这个方法,而且只能创建访问器属性。由于实现不彻底,建议读者不要在 IE8 中使用 Object.defineProperty() 方法。 你是否了解Vue实现双向数据绑定的原理?

    但是,他做的恶事绝对比他做的好事要多得多

    2015年3月,微软确认将放弃IE品牌,代号为“Project Spartan”的新版浏览器被正式命名为“Microsoft Edge”,但IE仍会存在于某些版本的Windows 10中。

    2016年1月13日(美国时间12日),微软停止为IE8/9/10这些旧版本的IE 浏览器提供技术支持。微软也最后一次放出了一个更新文件包(KB3123303),里面含有安全更新和“寿终正寝” 的升级提醒。

    2019年12月6日上午9点,微软通过其博客官方宣布:未来将采用 Chromium 内核开发桌面版 Edge 浏览器,以便为用户带来更好的 Web 兼容性,并为所有 Web 开发者减少 Web 碎片化。因此,微软计划成为 Chromium 项目的“重要贡献者”。

    采用 Chromium 意味着微软将用 Blink 渲染引擎替代自己的 EdgeHTML 引擎,用 V8 替代 Chakra JS 引擎。在 Android 上微软将使用 Blink/Chromium,而 iOS 上将使用 WebKit/WKWebView。对于使用 EdgeHTML 或 Chakra 的 Windows 10 应用,它们可以暂时保持现状,微软最终会向它们提供 Edge 采用的 Chromium 方案。开发者现在可以继续采用旧的方案或切换到 Chromium。


    信息来源:开源中国

    微软还计划将 Edge 浏览器引入 macOS 平台。此外,新版 Edge 可运行在所有受支持的 Windows 版本上,包括 Windows 7 和 Windows 8 系列 —— 直到微软终止支持,而不仅仅是 Windows 10。

    所以在更新频率方面,Edge 浏览器也将会与 Windows 10 的更新分离。微软将为 Microsoft Edge 带来更高频率的更新交付。

    微软表示,采用 Chromium 内核的 Edge 浏览器预览版将于2019年年初推出。

    chrome是Netscape的延续,到底谁嬴了?总之JavaScript已空前强大。

    相关文章

      网友评论

        本文标题:JS的历史

        本文链接:https://www.haomeiwen.com/subject/zcbyjqtx.html