第六章 JavaScript 发展历程
目录
购买本书
(广告,请不要屏蔽。)

第六章 JavaScript 发展历程

JavaScript 花了很长时间才产生了影响。许多与 JavaScript 相关的技术已经存在了一段时间,直到它们被主流发现。本节描述了从 JavaScript 诞生到今天所发生的事情。在整个过程中,只提到了最受欢迎的项目,许多项目都被忽略了,即使它们是第一个。例如,列出了 Dojo Toolkit,但也有同时期创建的不太为人知的 qooxdoo。Node.js 被列出来了,尽管 Jaxer 比它更早出现。

1997 年——动态 HTML
动态 HTML 允许您动态地改变网页的内容和外观。您可以通过操作页面的文档对象模型 (DOM) 来实现这一点,DOM 是一种树形数据结构。您可以做的事情包括改变内容、改变样式以及显示和隐藏元素。动态 HTML 首先出现在 Internet Explorer 4 和 Netscape Navigator 4 中。
1999 年——XMLHttpRequest
这个 API 允许客户端脚本向服务器发送 HTTP 或 HTTPS 请求并获取数据,通常是以文本格式(XML、HTML、JSON)。它是在 Internet Explorer 5 中引入的。
2001 年——JSON,一种基于 JavaScript 的数据交换格式

2001 年,Douglas Crockford 命名并记录了 JSON(JavaScript 对象表示法),其主要思想是使用 JavaScript 语法以文本格式存储数据。JSON 使用 JavaScript 字面量来表示对象、数组、字符串、数字和布尔值,以表示结构化数据。例如:

{
    "first": "Jane",
    "last": "Porter",
    "married": true,
    "born": 1890,
    "friends": [ "Tarzan", "Cheeta" ]
}

多年来,JSON 已经成为 XML 的一种流行的轻量级替代方案,特别是在需要表示结构化数据而不是标记的情况下。自然,JSON 很容易通过 JavaScript 使用(参见 第二十二章)。

2004 年——Dojo Toolkit,一个用于大型 JavaScript 编程的框架
Dojo Toolkit 通过提供必要的基础设施来促进大型编程:一个继承库、一个模块系统、一个用于桌面风格图形部件的 API 等等。
2005 年——Ajax,基于浏览器的桌面级应用程序

Ajax 是一组技术,它为网页带来了与桌面应用程序相媲美的交互性。2005 年 2 月,一个令人印象深刻的例子展示了通过 Ajax 可以实现什么:谷歌地图。这个应用程序允许你平移和缩放世界地图,但只有当前可见的内容被下载到浏览器。谷歌地图问世后,Jesse James Garrett 注意到它与其他交互式网站有一些共同的特点。他将这些特点称为 Ajax,是 异步 JavaScript 和 XML 的缩写。[7] Ajax 的两大基石是在后台异步加载内容(通过 XMLHttpRequest)和用结果动态更新当前页面(通过动态 HTML)。与总是执行完整的页面重新加载相比,这是一个相当大的可用性改进。

Ajax 标志着 JavaScript 和动态网络应用的主流突破。有趣的是,这花了多长时间——在那时,Ajax 的要素已经存在多年了。自从 Ajax 诞生以来,其他数据格式已经流行起来(JSON 取代了 XML),其他协议也被使用(例如,除了 HTTP 之外,还有 Web Sockets),双向通信也成为可能。但基本技术仍然是一样的。然而,Ajax 这个词现在已经很少使用了,大部分被更全面的 HTML5Web 平台(两者都意味着 JavaScript 加上浏览器 API)所取代。

2005 年——Apache CouchDB,一个以 JavaScript 为中心的数据库
粗略地说,CouchDB 是一个 JSON 数据库:你给它提供 JSON 对象,而不需要事先指定一个模式。此外,你可以通过执行 map/reduce 操作的 JavaScript 函数来定义视图和索引。因此,CouchDB 非常适合 JavaScript,因为你可以直接使用原生数据。与关系型数据库相比,没有与映射相关的阻抗失配。与对象数据库相比,你避免了许多复杂性,因为只存储数据,不存储行为。CouchDB 只是几个类似的 NoSQL 数据库 之一。它们中的大多数都对 JavaScript 有很好的支持。
2006 年——jQuery,帮助 DOM 操作
浏览器 DOM 是客户端网络开发中最痛苦的部分之一。jQuery 通过抽象出浏览器差异,并提供了一个强大的流式 API 来查询和修改 DOM,从而使 DOM 操作变得有趣。
2007 年——WebKit,使移动网络成为主流
WebKit 是一个 HTML 引擎,基于 KDE 的前期工作,由苹果公司在 2003 年推出。它在 2005 年开源。随着 2007 年 iPhone 的推出,移动网络突然成为主流,与非移动网络相比,几乎没有任何限制。
2008 年——V8,证明 JavaScript 可以很快
当谷歌推出其 Chrome 网络浏览器时,其亮点之一是一个名为 V8 的快速 JavaScript 引擎。 它改变了人们对 JavaScript 速度慢的看法,并导致了与其他浏览器厂商的速度竞赛,我们至今仍在从中获益。V8 是开源的,当你需要一个快速、广为人知的嵌入式语言时,它可以作为一个独立的组件使用。
2009 年——Node.js,在服务器端实现 JavaScript

Node.js 让你 实现性能良好的服务器。为此,它使用了事件驱动的、非阻塞的 I/O 和 JavaScript(通过 V8)。Node.js 的创建者 Ryan Dahl 提到了选择 JavaScript 的以下原因:

  • “因为它很简洁,而且没有 I/O API。”[因此,Node.js 可以引入自己的非阻塞 API。]
  • “网络开发者已经在使用它了。”[JavaScript 是一种广为人知的语言,特别是在网络环境中。]
  • “DOM API 是基于事件的。每个人都已经习惯了在没有线程和事件循环的情况下运行。”[开发者已经习惯了异步编码风格。]

Dahl 能够在事件驱动服务器和服务器端 JavaScript 的前期工作基础上进行构建(主要是 CommonJS 项目)。

Node.js 对 JavaScript 程序员的吸引力不仅仅在于能够使用熟悉的语言进行编程;你可以在客户端和服务器端使用相同的语言。这意味着你可以共享更多的代码(例如,用于验证数据的代码),并使用 同构 JavaScript 等技术。同构 JavaScript 是指在客户端或服务器端组装网页,它有许多好处:页面可以在服务器端渲染,以加快初始显示速度、SEO,以及在不支持 JavaScript 或版本过低的浏览器上运行。但它们也可以在客户端更新,从而获得响应更快的用户界面。

2009 年——PhoneGap,用 HTML5 编写原生应用程序
PhoneGap 是由一家名为 Nitobi 的公司创建的,该公司后来被 Adobe 收购。PhoneGap 的开源基础被称为 Cordova。PhoneGap 最初的使命是使通过 HTML5 实现原生移动应用程序成为可能。从那时起,支持范围扩大到非移动操作系统。目前支持的平台包括 Android、Bada、BlackBerry、Firefox OS、iOS、Mac OS X、Tizen、Ubuntu、Windows(桌面)和 Windows Phone。除了 HTML5 API 之外,还有 PhoneGap 特有的 API,用于访问 原生功能,如加速计、摄像头和联系人。
2009 年——Chrome OS,使浏览器成为操作系统

在 Chrome OS 中,网络 平台就是原生平台。这种方法有几个优点:

  • 创建操作系统要容易得多,因为所有的用户界面技术都已经存在。
  • 许多开发者已经(大部分)知道如何为该操作系统编写应用程序。
  • 管理应用程序很简单。这有助于网吧和学校等公共场所的安装。

移动操作系统 webOS(起源于 Palm,现在归 LG 电子所有)的推出早于 Chrome OS,但“浏览器即操作系统”的想法在后者身上体现得更为明显(这也是它被选为里程碑的原因)。webOS 既少又多。少,是因为它非常专注于手机和平板电脑。多,是因为它内置了 Node.js,让你可以用 JavaScript 实现服务。网络操作系统类别中最近的一个成员是 Mozilla 的 Firefox OS,它针对的是手机和平板电脑。Mozilla 的维基提到了网络操作系统对网络的好处。

我们还需要一个目标,以便确定我们努力的范围和重点。最近,我们看到了 pdf.js 项目[它通过 HTML5 渲染 PDF,无需插件],它暴露了一些需要填补的小漏洞,以便“HTML5”成为 PDF 的超集。我们现在想迈出一大步,找到那些阻碍网络开发者构建在各个方面都与为 iPhone、Android 和 WP7 构建的原生应用程序相媲美的应用程序的差距。

2011 年——Windows 8,一流的 HTML5 应用程序
当微软推出 Windows 8 时,该操作系统对 HTML5 的广泛集成让所有人感到惊讶。 HTML5 应用程序在 Windows 8 中是一等公民,与通过 .NET 和 C++ 等现有技术实现的应用程序处于同等地位。为了证明这一点,微软用 HTML5(加上对原生 API 的调用)编写了几个重要的 Windows 8 应用程序,包括应用商店 和电子邮件应用程序。


[7] Ajax 是一个缩写,但不是首字母缩写,这就是为什么它没有被格式化为 AJAX 的原因。

下一页:三、JavaScript 深入