当前位置: 首页 > 科技观察

从脚本走向主流,JavaScript的复苏之路

时间:2023-03-20 13:41:13 科技观察

说到非常流行的编程语言,JavaScript、Java、Python可能数不胜数。但如果你倒退几年、十年甚至二十年,在2000年你绝对不会相信JavaScript会成为当今世界上最流行的语言之一。当时的JavaScript不仅不能做专业语言能做的所有事情,它甚至没有被设计成一个严肃的编码工具。在这篇文章中,我们将向那些年的JavaScript发展致敬。概述1995年,通信公司Netscape意识到有必要为浏览器提供简单易用的浏览器动态脚本程序,以便在市场上与微软的IE竞争。于是在结束与SunMicrosystems的战略合作伙伴关系之前,利用最后一段时间,Sun的BrendanEich在不到10天的时间内创造了一种新语言,并将其嵌入到Netscape2浏览器中。而那个时候,为了赶上Java的流行,他们把这门语言称为JavaScript。但实际上,它与Java语言无关。Java和JavaScript这两个相似的名字多年来一直让很多人感到困惑,时至今日仍然是个问题。(JavaScript现在是Oracle的商标名称,免费使用可能存在版权问题。)第1章开始:滚动按钮的时代在JavaScript存在的前五年,它是为无法使用Java编程的人提供的白板工具(小程序)。它的粉丝包括业余爱好者和渴望完成简单任务的人。还有一个新的技术职业——网页设计师,他们的工作是让网页用户界面看起来更时尚、更图形化。他们想要比标签更精致、比GIF中旋转的地球更现代的东西。在专业领域,这是JavaScript的主要工作,创建将过度设计的网页粘合在一起的UI粘合剂。当您需要交互式按钮、弹出菜单或动态弹出的图像时,您可以使用JavaScript。不久之后,JavaScript开始被大量用于创建类似的效果:每当鼠标悬停时,将一幅图像换成另一幅图像。虽然认为开发人员会使用代码来自动化发光按钮然后在网页上分发他们的代码似乎很疯狂,但这是每个人都一遍又一遍地做的事情(今天,CSS提供了这种装饰,它使用样式和动画而不是预先生成的图像文件以更易于维护的方式执行此操作。)。很少有人期望JavaScript能走得更远。还有,很多编码人员更喜欢使用服务器端编程语言,让他们按需提供正确的JavaScript脚本。JavaScript可以为应用程序中的业务逻辑提供动力的想法就像用Excel宏替换数据库存储过程一样。Chapter2局限性:沙盒的囚徒今天人们批评JavaScript时,通常是因为语言本身的局限性:修补面向对象的特性、弱类型安全、笨拙的DOM模型、==vs.===混乱和很快。但JavaScript并非天生如此。毕竟,有许多丑陋的编程语言很重要,因为它们在正确的时间出现在正确的领域。(如BASIC、COBOL、SQL和PHP)JavaScript是当时所有Web浏览器唯一支持的语言,并且随着Web接管世界,它一定在正确的时间出现在了正确的位置。JavaScript的真正限制是沙箱,这是一种将代码锁定在适当位置的严格控制的环境。沙箱将JavaScript与桌面世界隔离开来。例如,JavaScript代码不能直接访问文件系统、显示器或任何硬件。更严重的是,它将JavaScript与Web服务器上的所有内容隔离开来,例如存储用户列表和产品目录的数据库,以及运行业务逻辑的服务器端代码。JavaScript被迫孤军奋战在前线,但它也整天忙于在网页上旋转按钮。第3章叛乱:Ajax和XMLHttpRequest不过幸运的是,微软并没有对JavaScript产生太大的敌意,并将其保留在IE中。并打算以“抱、扩、灭”的理念来消耗竞争对手。当时,Microsoft的一个团队正在研究一种使Outlook的Web前端响应更快的方法。他们正在构建一个名为OutlookWebAccess的产品,看起来像这样:MicrosoftTeams的目标相对适中。他们想开发一个在浏览器中运行的高效电子邮件阅读器。最重要的是,他们不想每隔几秒就刷新整个页面。相反,他们采用了一种允许网页在后台静默检查新邮件的技术。这个目标现在看来可能不是什么大事,但请记住,那时Gmail还没有,Google刚刚出现,还没有什么名气。Microsoft团队使用名为XMLHttpRequest的ActiveX组件创建了一些管道。XMLHttpRequest的基本思想很简单:它为JavaScript代码提供了一种发出Web请求的方法。就像浏览器可以联系Web服务器并发出请求(例如,“嘿,请给我发送一个页面!”),JavaScript代码可以使用XMLHttpRequest对象来发出自己的请求(例如,“嘿,请发送给我一些更多的邮件”)。突然,潘多拉的盒子打开了,网页开始调用网络服务器的所有资源:需要从数据库中获取一些数据吗?调用服务器并查询。服务器是否需要进行计算、安全测试、超密验证检查?也叫服务员,最重要的是后台调用的时候不会影响页面显示。但是XMLHttpRequest也有很多问题。首先,它有怪异的名字,大小写不一致,导致JavaScript等区分大小写的语言头疼。其次,顾名思义,请求是使用XML消息发送和接收的。事实上,消息几乎可以是任何东西,纯文本、HTML块或序列化为JSON的JavaScript对象。但是更大的问题是XMLHttpRequest的支持技术。它是用ActiveX构建的,因此它只支持在Windows机器上运行,并且只支持在InternetExplorer中运行。这些怪癖都没有阻止它。在短短几年内,其他浏览器提供了它们自己的XMLHttpRequest实现-代码中的相同对象,但没有ActiveX麻烦。微软虽然创造了XMLHttpRequest,但是在自己的web开发中并没有得到充分的利用。甚至在公共网络电子邮件系统的后继者Hotmail中也没有。相反,是谷歌最先使用XMLHttpRequest技术开发出震惊世界的Web产品。谷歌于2004年首先开发了其公共网络邮箱Gmail;然后,第二年的谷歌地图。这两个伟大的产品开始让XMLHttpRequest和Ajax技术大放异彩,风靡全球。第4章RightingtheRight:通往现代之路XMLHttpRequest是改变JavaScript进程的关键因素。然而,从那以后出现了很多拐点。多年来,JavaScript语言一直处于冻结状态。市场领先的IE浏览器需要随着操作系统的升级而升级,版本迭代非常缓慢。开发者被迫编写大量的脚本来检查不同的IE浏览器版本是否适配。2006年,开发者使用jQuery框架获得了正式的统一解决方案。尽管jQuery在今天已经过时,但在10年前,如果您花时间构建功能而不是解决浏览器兼容性问题,它还是一个必备工具。Google在2008年发布了一个名为V8的新JavaScript引擎。如果说jQuery的出现为Web开发人员提供了广泛的兼容性,那么V8则为他们提供了出色的性能。由于V8引擎是一个独立的开源组件,其他项目也可以使用它。后来也因此衍生出了Node.js、Electron等伟大的项目。2008年下半年,W3C发布了HTML5的第一份工作草案。HTML5与JavaScript本身无关,而是与一波新的JavaScriptAPI相结合。突然之间,开发人员拥有了用于存储本地数据、管理浏览器历史记录、使用音频和运行后台任务的工具。Web功能和桌面功能之间的差距再次缩小。Chapter5Nirvana:ModernJavaScriptJavaScript的成功是它在浏览器中的特权的必然结果吗?还是需要运气和完美的时机?我觉得很多都是为了考虑和平衡。根据经济学的定理,为了不让一家公司独大,各大公司之间权衡取舍的结果。结果是JavaScript被迫获胜。在JavaScript的生活中,从来没有太多的爱。起初每个人都支持Javaapplet,然后是Flash,以及Microsoft的Silverlight版本。JavaScript面对这些挑战者并且(曾经)击败了他们。JavaScript的未来是一条快速分支的道路。JavaScript现在运行在Web服务器(Node.js)和桌面应用程序(Node.js和Electron)上。还有更高级的方言,例如编译为JavaScript的TypeScript,为开发人员提供了一种在不违反规范的情况下舒适地进行开发的方法。未来,在WebAssembly的帮助下,它也可能会彻底摆脱语言限制,为开发者提供一种通过JavaScript引擎使用任何他们想要的高级语言的方式。JavaScript虽然缺点很多,但不愧是天子(各大经济巨头)。BrendanEich将JavaScript放入NetscapeNavigator,我们正试图让整个世界都进入浏览器。这就是现代网络,也是未来的物联网。