还记得曾几何时,不少朋友出于安全性考虑而选择在自己的浏览器上禁用JavaScript。时至今日,这种作法已经变得荒谬可笑——理由很简单, JavaScript已经统治了整个网络世界。在这个充斥着平台多样性的全新计算时代,我们需要那些能够运行在任意设备浏览器中的应用程序。原生应用可能运行速度更快、调用更多JavaScript 无法染指的特定平台功能,但不可否认,云时代已然来临、我们则身处其中。有鉴于此,我们要继续坚持针对专一平台编写桌面或者移动应用、还是拓宽思路利用 JavaScript开发一些任何平台都能够接纳的应用方案?
当然,这个问题的具体答案取决于该应用的实际特性。 JavaScript存在多种局限——出于安全原因, JavaScript无法对客户端中的文件进行读取或者写入。而且“真正的”程序员更倾向于不断强调此类缺点。不过JQuery以及多种其它框架的出现已经使JavaScript 获得了构建复杂应用程序的能力;此外,JSON(即 JavaScript Object Notation)能够全面取代XML的数据传输功能。更不用提Node.js,它刚刚在最新一轮 InfoWorld Bossie评选中脱颖而出、帮助JavaScript 强势进军服务器端。
JavaScript能走多远?
堪称巧合的是,InfoWorld新技术论坛上同时出现了两篇文章,且都以探讨JavaScript的潜在发展空间为主:一篇由VisiCalc联合创造者、来自Alpha Software的 Dan Bricklin撰写,另一篇则由Adobe的Divya Manian 及Thibault Imbert联手推出。在《JavaScript在移动平台上击败原生代码》一文中, Bricklin针对JavaScript执行速度低于原生代码这一假设作出了回应:
实际情况是,原生代码所能够完成的数学执行运算都能够在JavaScript上顺利实现(而且计算的相关时耗也并无不同)。上述观点忽略了这样一项客观现实,即对于各种不同类型的执行与计算工作而言,基于JavaScript的应用程序往往拥有与原生代码相同甚至更为出色的表现。
为什么会这样?Bricklin解释称,因为睿智的程序员多年以来一直在对浏览器进行调整、旨在优化此类执行工作的速度表现。此外,浏览器内高级执行能力也迎来了显著提高,其中最具代表性的就是3D渲染功能。
从Adobe公司的立场出发,Manian与Imbert对 JavaScript的发展前景作出了预期,并提到了 Mozilla打造的研究项目asm.js——该项目“定义了一套JavaScript子集,可由编译器生成并通过JavaScript虚拟机实现高度优化。”更令人振奋的是,他们还对RiverTrail(一套由英特尔打造的、专门用于JavaScript开发工作的并行编程模型及API)进行了探究。两位作者还提到Adobe正在将新型HTML 5功能推进至标准化高度,其中包括Regions、Blend Modes以及 Shapes等。纵览整篇文章,我们发现Manian与Imbert相当于给Flash以及ActionScript这两套行将就木的技术方案又一记猛击。
JavaScript生态系统
JavaScript的胜利似乎给业界带来了灵感,如今每周都会有一款新型框架与世人见面、其它与JavaScript开发相关的工具也层出不穷:
ANGULARJS,一款用于将静态HTML页面转化为JavaScript应用的工具集,同时支持MVC架构。 BACKBONE.JS, 一款JavaScript库,允许开发人员向应用中添加结构并以Model形式表现数据。 BOOTSTRAP, 一款负责网页设备的框架,旨在与 JQuery进行对接。 ENYO, 一款面向对象型JavaScript框架,能够被用于创建HTML 5/CSS应用。 D3, 一款JavaScript库,能够在无需插件配合的前提下向浏览器推送矢量图形。 EMBER.JS, 一款前景广阔的JavaScript框架,用于开发MVC应用程序开发并配备丰富功能。 EMSCRIPTEN, 一款能够将C++转化为asm.js( Mozilla打造的高优化性JavaScript子集)的编译器方案。 JavaScript拥有成员众多的支持工具阵营——以上列举的仅是其中最为出色的少数解决方案。
其中大部分属于开源项目,这些工具的不断拓展也成为JavaScript强劲发展势头的重要驱动因素。
但是……JavaScript本身又如何?
不过,经验丰富的开发人员对此拥有存在抵触情绪。InfoWorld网站的Andy Oliver这样描述他所抱持的保留态度:
JavaScript一直都是备选开发途径中的一员—— 我们真正要做的是考量其是否适合自己的需求…… 我接触到的管理者喜欢JavaScript,因为它允许开发人员在其中使用jQuery、Node.js甚至利用 MongoDB处理一部分数据库事务。但我身边的开发人员显然持不同观点,他们讨厌日以继夜地进行 JavaScript开发……开发项目负责人同样持抗拒情绪,因为JavaScript牺牲掉了不少宝贵的数据库功能。
换言之,作为一种既易于学习、又有所局限的开发方案,JavaScript给编程工作带来了民主化进程 ——一旦开发人员的工作目标模糊不清、最终开发成果也将变得一团糟。
不过已经有越来越多优秀的JavaScript程序员逐步成长起来,其中不少都能在asm.js或者英特尔 RiverTrail并行编程模型的支持下打造出卓越的工作成果。而且毫无疑问,他们并没有在工作中受到缺乏相关工具的困扰。不过最出色的并不一定能获得最终胜利。对于x86指令集来说,笑到最后的可能也是惟一有能力活到最后的。我不知道JavaScript要如何实现自身扩展来迎合开发人员的工作需求,例如打造整体功能的丰富程度可与微软Office比肩的复杂应用程序。不过鉴于通过浏览器窗口观察世界的方式实在有点别扭,至少我本人不会把压箱底的资金投入到这类项目身上。