原文地址:https://medium.com/young-coder/how-javascript-grew-up-and-became-a-real-language-17a0b948b77f
原文标题:How JavaScript Grew Up and Became a Real Language
(正文开始)
如果你在1999年预测:20年后,javascript将成为世界上最流行的语言之一,你要么产生了幻觉,要么你有点疯狂。
2000年时候的JavaScript,不仅仅无法做到专业语言所能做到的,它甚至没有被设计成一个严肃的编码工具。毕竟,web应用的开发人员已经有了他们喜欢的成熟工具:Java,通过Applet嵌入系统。
但在1995年,作为网络浏览器先驱公司的网景公司意识到,他们需要为其他人提供一个更简单的选择。他们当时处境艰难:竞争对手微软即将与Sun公司达成重大战略合作伙伴关系。时间十分紧迫。他们雇佣了Brendan Eich,让他在一个不可能的时间里创造一门新的语言。他在10天内就完成了第一个版本的javascript,正好赶上了这个漂亮的浏览器:
Eich真正想做的是构建一个像Scheme这样的学术编程语言的浏览器托管版本。但是Netscape公司有不同的想法。他们想要一种看起来想Java的语言,即使它的行为不一样。于是,JavaScript诞生了。Java和JavaScript,两个相似的名字,导致了多年的混乱。
I was under marketing orders to make it look like Java but not make it too big for its britches. It’s just this sort of silly little brother language, right? The sidekick to Java. —— Brendan Eich
翻转按钮的时代
在诞生后的前5年,JavaScript作为一个工具,满足了那些无法用Java编程的人。这些人里面包括了业余爱好者和那些想要快速开发简单应用的人。还包括网页设计师——一个新的技术工人阶层,他们的工作是使网页用户界面看起来圆滑和图形化。他们想要的东西比<blink>标签更精致,比旋转的全球GIF更现代。
在专业领域,JavaScript的主要工作是——将设计好的网页和用户界面结合起来。每次你需要一个交互按钮,一个弹出菜单,一个飞越图像效果,你都需要JavaScript。
谁想要一个翻转按钮效果?谁都想要。
不久之后,Javascript被大量使用,做了世界上最不重要的工作——每次鼠标经过时都会交换一个图像。
开发人员使用代码来自动化头部按钮然后将网页和代码一起分发,尽管这看起来是一个疯狂的想法,但这是每个人都一遍一遍做过的。(今天,CSS提供了一种更易于维护的方法,使用样式设置和动画,而不是预先生成的图像文件。)很少有人希望JavaScript能走得更远。许多编码人员更乐意使用服务器端编程语言,使用一些指令生成正确的javascript。Javascript可以为应用程序中的业务逻辑提供动力的想法,和想用Excel宏替换数据库存储过程一样荒谬。
沙盒囚徒
如今,当人们批评javascript时,通常是因为语言本身的局限性——拼凑的OOP特性、弱类型安全性、笨拙的dom模型、==和===的混淆等等。但这些并不是Javascript在其早期看起来是如此糟糕的编程工具的原因。毕竟,有许多丑陋的编程语言,它们在正确的时间、正确的地点变得至关重要(比如basic、cobol、sql和php)。JavaScript是每个Web浏览器中本机支持的唯一语言,就像网站接管世界一样,它在正确的时间处于正确的位置。
JavaScript的真正限制是沙盒 —— 严格控制了代码的执行环境。沙盒将JavaScript与桌面世界隔绝。例如,javascript代码无法直接访问文件系统、显示器或任何硬件。更严重的是,沙盒切断了JavaScript和Web服务器的联系,比如存储客户列表和产品目录的数据库,以及运行业务逻辑的服务器端代码。被迫独立生存的Javascript,除了在页面上做翻转按钮之外,几乎没有什么事可做,这并不奇怪。
使用XMLHttpRequest打开了管道
奇怪的是,微软拯救了JavaScript。那个时候的微软,并不是今天这样在每一个操作系统上鼓励开源开发的公司。相反,那时的微软是一个赤裸裸的,反开源的战士,以“拥抱,延伸和熄灭”的理念消耗竞争对手。
事情是这样的。大约在世界疯狂使用翻转按钮的同时,微软的一个团队正在研究一种使Outlook的Web前端更具响应性的方法。他们开发构建一个名为Outlook Web Access的产品,如下所示:
微软团队的目标相对温和。他们想制作一个在浏览器中运行的高效的电子邮件阅读器。最重要的是,他们不想每隔几秒钟刷新整个页面。相反,他们所追求的技术是让网页在后台悄悄地检查新邮件。这一目标可能看起来并不惊天动地,但请记住,Gmail还没有发明出来。事实上,整个谷歌公司只有几年的历史。
微软团队用一个叫做XMLHttpRequest的ActiveX组件创建了一个小的管道系统。XMLHttpRequest的基本思想很简单,它为JavaScript代码提供了一种生成Web请求的方法。就像Web浏览器可以联系Web服务器并发出请求一样(例如,“嘿,请把那个页面给我!”“),javascript代码可以使用XMLHttpRequest对象发出自己的请求(例如,“嘿,请再给我发送一些邮件消息”)。
突然之间,一个web页面可以利用web服务器的所有资源。需要数据库中的一些数据吗?调用服务器请求它。需要服务器执行计算、安全测试、超级机密验证检查吗?向服务器发请求吧。最重要的是,当调用发生在后台时,页面保持不变。
XMLHttpRequest也有一些奇怪的地方。首先,它的名字很奇怪,在像javascript这样的区分大小写的语言中,大小写不一致会让人头痛。其次,这个名称似乎在说:你的代码发送和接收XML消息。事实上,消息几乎可以是任何东西——普通文本、HTML块或序列化为JSON的JavaScript对象。但是,最大的问题可能是XMLHttpRequest是使用ActiveX构建的,这意味着它只能在Windows计算机上工作,而且只能在Internet Explorer中工作。
这些怪异的点都没有阻止它。在短短几年内,其他浏览器提供了自己的XMLHttpRequest实现——在代码中是相同的对象,但没有任何ActiveX的困扰。
尽管创建了XMLHttpRequest,但微软在自己的Web开发中的应用却进展缓慢。他们不愿在公共的基于网络的电子邮件系统hotmail中使用它。相反,他们一直等到谷歌使用XMLHttpRequest震惊了Web开发世界。首先是2004年的Gmail,然后是2005年的谷歌地图。这是一个真正的里程碑:基于网络的程序被赋予了桌面应用程序一样的响应能力。
现代化之路
XMLHttpRequest是改变javascript进程的关键因素。不过,之后又出现了几个拐点。
多年来,JavaScript的发展一直停滞不前。市场份额领先的浏览器Internet Explorer只有在操作系统更新时才会升级,也就是说,升级速度非常缓慢。开发人员被迫编写代码,检查浏览器版本并尝试动态调整。
2006年,jQuery给开发人员提供了解决方案。尽管jQuery现在已经有点过时了,但10年前,如果您想花时间开发功能,而不是解决浏览器兼容性问题,它是一个必不可少的工具。
2008年,谷歌发布了一个名为v8的新javascript引擎。尽管jQuery第一次为开发人员提供了广泛的兼容性,但v8给了他们惊人的性能。因为V8引擎是一个独立的开源组件,所以其他项目可以使用它。这为之后的node.js和electron等创新打开大门。
2008年末尾,HTML5的第一份工作草案出现了。HTML5本身不是关于JavaScript,而是与新的JavaScript API浪潮配对。突然之间,开发人员拥有了存储本地数据,管理浏览器历史记录,使用音频和运行后台任务的工具。再一次,Web功能和桌面功能之间的差距缩小了。
现代JavaScript
JavaScript的成功是其在浏览器中的特权地位的必然结果吗?或者是一种需要运气和完美时机的侥幸?
有一件事是肯定的,javascript是被迫发展的。在它诞生后大部分时间里,都不是人们的最爱。其他人支持Java applet,然后是Flash,甚至是Silverlight。JavaScript面对这些挑战者,战胜了他们。
也许最公平的评估是,JavaScript证明了每一个开发者内心深处都明白的事:新技术最重要的因素是它的影响力。 如果你的技术具有卓越的覆盖范围,则无需一开始就做到最好。 你需要的只是足够好。
JavaScript的未来还会继续高速发展。我们现在可以在Web服务器上运行JavaScript(感谢Node.js),可以用JavaScript开发桌面应用(感谢Node.js和Electron)。我们有相似的语言,如TypeScript,可编译成JavaScript,为开发人员提供了另一种编写网页的方法。而且在未来,WebAssembly可能会彻底打破语言限制,让开发人员可以通过搭载JavaScript引擎来使用他们想要的任何更高级别的语言。
是时候承认了,尽管JavaScript有很多缺陷和不一致之处,但它仍是一门伟大的语言。Brendan Eich将JavaScript放入了网景公司的浏览器,而我们将整个世界塞进了浏览器。最终,现代网络诞生了。