中国领先的IT技术网站
|
|

谷歌的Dart语言能否解决JavaScript的速度与规模难题?

大型JavaScript Web应用程序很可能既难于开发、又运行缓慢。相比之下,谷歌的Dart语言针对这两大难题给出了解决方案。

作者:核子可乐译来源:51CTO|2013-09-09 10:35

Tech Neo技术沙龙 | 11月25号,九州云/ZStack与您一起探讨云时代网络边界管理实践


大型JavaScript Web应用程序很可能既难于开发、又运行缓慢。相比之下,谷歌的Dart语言针对这两大难题给出了解决方案。

JavaScript如今的主要应用方式与其最初定位可谓风马牛不相及:当下它正作为托管于浏览器当中的平台用于大型Web应用程序开发。如果创造JavaScript的技术人员能够早点预见到这类应用方式——而不仅仅是为Web页面增添活力——那么JavaScript的设计思路很可能完全不同。

这是因为在大型Web应用程序的开发流程中,存在着两大主要难题。

首先,性能难题:作为无法辩驳的事实,利用JavaScript编写的大型应用程序在运行速度方面相对较慢,这必然会给程序用户造成负面影响。

其次,JavaScript本身的结构也存在问题:这是一种语言,因为大型团队很难利用它组织开发工作。不同模块之间缺乏明显的结构以及强有力的联系,加之代码本身的表达意图难以付诸沟通,这给开发团队造成很大困扰。对于个人开发者,沟通便捷性似乎并不重要;但对于大型项目的开发团队而言,沟通编码意图是保证项目成功的关键所在——尤其是随着时间推移产生的人员更替,继任者很可能对遗留代码感到困惑与迷茫。

大型应用程序通常采用模块化开发机制,即由不同开发人员负责各自独立的代码片段。然而由于JavaScript的动态特性,对象行为会随着时间推移发生变化,这与C、C++、Java或者C#完全不同,意味着大家需要通过执行代码来确定其具体作用。

对Web应用运行速度的渴求

经过长时间的调整,JavaScript当然已经拥有了一些令人振奋的速度提升效果,而且五年之后横空出世的谷歌V8 JavaScript引擎为这款根基孱弱的语言带来巨大飞跃。但必须承认,JavaScript开发人员仍然受到目前这一代JavaScript引擎的严重束缚,我们恐怕还要等上很久才能迎来下一轮革命性进化。

可能的方案之一在于asm.js,这是一套采用高度限制机制的JavaScript子集,最显著的特征在于舍弃了动态特性——也就是JavaScript优化道路上的最大障碍。

顾名思义,asm.js通常被视为一种针对JavaScript引擎的汇编语言。它目前尚处于测试阶段,而且由Mozilla负责项目推进。

由于它属于JavaScript的子集,因此拥有全面向下兼容现有JavaScript引擎的能力。另外,能够与asm.js协作的引擎在运行速度上也远高于普通JavaScript——其具体速度能够达到本地代码的一半左右。(最新版本的火狐浏览器[22版本]能够支持asm.js优化,Mozilla公司的开发人员网站上也给出了技术演示材料。)

正如C++或者C#开发人员在处理对性能要求较高的代码片段时常常选择低级语言,asm.js也可以成为JavaScript开发人员的备选方案——大部分是游戏开发者——并成为创建关键性能代码片段的理想途径。没错,不太可能会有开发人员愿意用它开发整个应用程序,但它确实能让代码中的某些子集拥有理想的运行速度。

事实上,大多数开发人员可能从来不会直接使用asm.js。他们更可能使用C或者C++(或者利用现有C或C++应用程序)而后利用Emscripten转译器将代码编译为asm.js。

大型Web应用程序开发

虽然有能力带来速度提升,但在利用JavaScript开发大型Web应用程序方面,asm.js就帮不上什么忙了。相比之下,帮得上忙的要数微软提供的TypeScript方案。从概念上讲,TyperScript与asm.js正好相反:asm.js属于JavaScript的子集,而TypeScript则属于超集。

这个超集的作用在于为JavaScript开发流程带来一定结构,从而通过命令行编译器利用插件将常规JavaScript、类型检查以及Visual Studio 2012加以集成。它的局限性在于无法带来性能提升:TypeScript编译而成的JavaScript内容与手写JavaScript内容几乎相同。

Web应用程序的速度与规模

综上所述,asm.js带来更理想的运行速度,而TypeScript则提供适用于大型Web应用程序的JavaScript开发环境。但二者无法同时解决这两大难题。

而这正是谷歌Dart语言的预定目标。根据谷歌公司内部邮件的说法,Dart希望成为一款“JavaScript的终极替代方案,正如用于Web开发的通用语在开放Web平台上的角色。”

这个目标可谓雄心勃勃,那么Dart到底是什么?它是一种开源编程语言,在设计之初就考虑到了大型应用程序开发以及高运行性能两大实际需求。事实上,将Dart称为一种语言并不贴切,因为Dart本身还捆绑有一款验证器及其它各种开发工具。由Dart编写的应用程序能够运行在Dart虚拟机当中,且运行速度可达到浏览器上JavaScript速度的两倍。目前只有谷歌的开源Chomium定制浏览器版本才支持Dart,该浏览器名为Dartium,但相信Chrome对其实现全面支持将只是时间问题。

编译为JavaScript

Dart代码可以通过dart2js编译器转化为JavaScript内容,从而以兼容方式运行在一般浏览器当中。尽管由Dart编译而成的JavaScript代码在运行速度上无法与本地Dart代码相提并论,但它仍然比开发人员们人工编写的JavaScript代码快得多,软件开发者兼《Dart在行动》一书作者Chris Buckett解释道。

“当代码由Dart转化为JavaScript时,编译器所做的类似于摇动树干以震下枝叶,”Bucket指出。在JavaScript方面,即使只需要其中一项功能、大家也不得不添加一整套库。但在“摇树”原则的帮助下,Dart能够在向JavaScript转化的过程中只纳入必要的单项功能而非完整库。Dart还会对我们的代码进行分析并有选择地进行类型检查,从而删除一部分不必存在的内容,Buckett表示。而在人工编写的JavaScript代码中,我们将被迫以非常保守的方式处理内容。

杀手级Dart应用

目前除了谷歌公司之外,还没有哪家浏览器供应商愿意直接为Dart提供支持,因此Dart成为另一种Web通用语言的可能机微乎其微。不过Buckett认为,杰出性能与简易规模化开发两大优势——外加Dart工具的现有生态系统——很可能会推动Dart走上普及之路。

“在短期内我们还不太可能在其它浏览器中看到Dart虚拟机的出现,但如果Dart能够拿出几款杀手级应用程序成品,而且在Chrome当中飞速运行——例如下一个Facebook版本——那么人们很可能希望能在自己的浏览器中看到Dart的身影,”Buckett提出假设。“这种态势在移动浏览器领域出现的可能性更高,因为JavaScript正是移动设备电池寿命的主要威胁之一。”

现在JavaScript开发人员还迎来了另一条好消息——从JavaScript到Dart的技能转化过程非常简单,不过Dart的编程要求比JavaScript要更严格一些。总而言之,任何一位曾经利用Java或者C#等服务器端语言从事过开发工作的技术人员都能够打理好这些额外限制,因此Dart的未来可谓一片光明。

原文链接:http://www.cio.com/article/739042/Can_Google_Dart_Solve_JavaScript_s_Speed_and_Scale_Problems_

【编辑推荐】

  1. JavaScript与有限状态机
  2. 操作实例:创建博客阅读器(JavaScript 和 HTML)
  3. JavaScript 的性能优化:加载和执行
  4. JavaScript变量作用域之殇
【责任编辑:chensf TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

C#和.NET核心技术

本书重点讲解如何用实用的代码来解决具体的实际问题。本书的内容覆盖面很广,从新的C#范型到Web服务,从反射到安全等都有涉及。系统地介绍...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× CTO训练营(深圳站)