一篇讲述 JavaScript 历史的文章,值得一读。javascript
若是你在 1999 年预测 20 年后, Javascript 会成为世界上最流行的语言之一。要么是一种幻觉,要么是疯了。前端
在上世纪之初,Javascript 不只不能作一些专业语言作的事,它也不能设计一些很酷的工具。毕竟,须要建立 web 应用的开发者们已经拥有了他们更喜欢用的成熟的工具。好比说 Java 就有 applet 内嵌在系统之中。java
可是在 1995 年,web 浏览器的先驱公司——网景意识到他们须要给人们提供一种简单的选择。当时该公司处在与微软市场大战的不利位置中,处于在与太阳计算机系统公司结束合做关系的边缘,以及时间带来的压力等。网景公司雇了 Brendan Eich 去在不可能的时间中创造了一种新的语言。他在 10 天后发布的该语言的初版,以下图所示的浏览器中包含了该语言:程序员
Eich 真正想要作的是构建一个像 Scheme 这样的学术编程语言的浏览器托管版本。但网景公司有不一样的愿景。他们想要一种看起来像Java的语言,即便它的表现不一样。相似的只有名称--Java和JavaScript,这致使多年的混乱。web
“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数据库
“我在遵循市场的状况下去让它看起来像 Java 可是没有把它作得很大。只是像某种兄弟语言,对吧?像是 Java 的副手。”编程
在其生命的前五年中,JavaScript 对于那些没有接受 Java 编程的人来讲是一个填补空白的工具。这些人包括业余爱好者,自学成才的以及简单快速了解一下的人。还包括网页设计师一类的技术工做者,他们的工做是使网页用户界面看起来更加时尚和图形化。 他们想要比 浏览器
在专业领域,这是JavaScript的主要工做 - UI胶水,将设计过的网页组合在一块儿。每当须要交互式按钮,弹出菜单,飞越图像效果时,都须要JavaScript。安全
不久以后,JavaScript 在至少是世界上最重要的工做中被大量使用,这就是:每次鼠标到来时,都会将一个图像换成另外一个图像。服务器
虽然认为开发人员会使用代码自动化发光按钮,而后用他们的网页分发代码彷佛是疯狂的,这就是每一个人都作的 - 一遍又一遍。(今天,CSS提供了这种褶边,它以更加可维护的方式实现,使用样式设置和动画而不是预先生成的图像文件。)不多有人指望JavaScript会更进一步。 许多程序员更乐意使用服务器端编程语言,这种语言能够生成正确的JavaScript 命令。JavaScript能够为应用程序中的业务逻辑提供力量的想法与想象用Excel宏替换数据库存储过程同样荒谬好笑。
当人们今天批评JavaScript时,一般是由于语言自己的限制 - 补丁般的OOP功能,弱类型安全问题,笨重的DOM模型,==与===的混淆等等。但这些并非JavaScript在早年看起来像是一个糟糕的编程工具的缘由。毕竟,有许多丑陋的编程语言经过在正确的时间出如今正确的位置而变得相当重要。(包括BASIC,COBOL,SQL和PHP。)JavaScript 是每一个网络浏览器自己支持的惟一语言,就像网站正在接管世界同样,确定是在正确的时间和正确的地方。 JavaScript 的真正限制是沙箱 - 严格控制环境,将代码固定在某处。沙箱将 JavaScript 从桌面世界中删除。例如,JavaScript 代码没法直接访问文件系统,显示器或任何硬件。更严重的是,它将 JavaScript 从Web服务器上的全部内容中删除,例如存储客户列表和产品目录的数据库,以及运行业务逻辑的服务器端代码。被迫生活在本身的局限中,绝不奇怪 JavaScript 只是在页面上没有什么可作, 除了只是旋转按钮。
奇怪的是,微软保存了 JavaScript 的有用案例。并非今天的微软,它是在每一个操做系统上庆祝开源开发的公司。相反,那个微软是一个赤裸裸的,反开源的战士,以 “拥抱,延伸和熄灭” 的理念消耗竞争对手。 这是它发生的缘由。 大约在翻转按钮的世界变得疯狂的同时,微软的一个团队正在研究如何为 Outlook 制做响应更快的 Web 前端。他们正在构建一个名为Outlook Web Access 的产品,以下所示:
微软团队的目标相对保守。他们但愿制做一个高效的电子邮件阅读器而不是在浏览器中运行。最重要的是,他们不想每隔几秒刷新整个页面。相反,他们采用的技术可让网页在后台安静地检查新邮件。这个目标可能看起来不是惊天动地,可是,请记住--Gmail还没有发明。事实上,整个谷歌公司只有几年的历史。 Microsoft团队用一个名为XMLHttpRequest的 ActiveX 组件建立了一小部分通道。XMLHttpRequest 的基本思想很简单 - 它为JavaScript代码提供了一种发出Web请求的方法。就像 Web 浏览器能够联系 Web 服务器并发出请求(例如,“嘿,请给我那个页面!”),JavaScript 代码可使用 XMLHttpRequest 对象来发出本身的请求(例如,“嘿,请给我发一些邮件“)。 忽然之间,网页能够利用Web服务器的全部资源。须要数据库中的一些数据?打电话给服务器并要求它。须要服务器执行计算,安全测试,超级机密验证检查吗?也为此调用服务器。最重要的是,当呼叫在后台进行时,页面保持不受干扰。 XMLHttpRequest并不是没有一些奇怪之处。首先,它被奇怪地命名,具备不一致的大写,致使像JavaScript这样的区分大小写的语言中的头痛。其次,该名称代表您的代码将发送和接收XML消息。事实上,消息几乎能够是任何东西 - 普通文本,HTML块或序列化为JSON的JavaScript对象。但也许最大的问题是 XMLHttpRequest 是使用 ActiveX 构建的,这意味着它只能在Windows计算机上运行,并且只能在 Internet Explorer 中运行。 这些怪癖都没有阻止它。在短短几年内,其余浏览器提供了本身的 XMLHttpRequest 实现 - 代码中的相同对象,但没有任何 ActiveX 头痛。 尽管建立了 XMLHttpRequest,但微软在本身的Web开发中利用它的速度很慢。他们在基于Web的公共电子邮件系统 Hotmail 中犹豫不决。相反,他们一直等到谷歌使用XMLHttpRequest来震惊开发的世界,首先是2004年的Gmail,而后是2005年的谷歌地图。这是如同见证了奇迹同样:基于网络的程序与桌面的响应性同样的应用。
XMLHttpRequest 是改变 JavaScript 过程的关键因素。然而,此后还有几个关键拐点。
多年来,JavaScript 语言被在一个时间段上被冻结。问题在于,市场领先的 Web 浏览器 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)并为桌面应用程序效力(感谢 Node.js 和 Electron)。咱们有一步一步的语言,如TypeScript,可编译成JavaScript,为开发人员提供了一种在不损害其道德的状况下编写网页的方法。并且在将来,WebAssembly 可能会完全打破语言限制,让开发人员能够经过搭载JavaScript引擎来使用他们想要的任何更高级别的语言。
是时候认可了。JavaScript,其全部的侵入和变化,是伟大的做品之一。 Brendan Eich 将 JavaScript 放入 Netscape Navigator 中。咱们把整个世界塞进了浏览器。结果是就是现代网络。