技术开发 频道

Dart语言能否解决JavaScript速度问题

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

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

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

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

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

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

对Web应用速度的渴求

  对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内容几乎相同。

1
相关文章