编译为JavaScript后的问题 调试问题 由于是交叉编译,导致输出的代码很难被跟踪调试。 一些工具在编译的过程中会生成映射文件(将编译后的JavaScript代码映射到源语言),可以通过这些文件来进行调试。 性能问题 由于 JavaScript在浏览器中运行问题,本地代码编译为JavaScript后的执行速度可能会下降。 对于此类问题,Mozilla给出了一个解决方案—— asm.js(见《 asm.js:JavaScript的“汇编语言”》)。asm.js是一个JavaScript的一个严格的子集,提供了一个类似于C/C++虚拟机的抽象实现,包括一个可有效负载和存储的大型二进制堆、整型和浮点运算、高阶函数定义、函数指针等,可以被用来作为一个底层的、高效的编译器目标语言。 此外,还可以使用Mozilla开发的 JavaScript引擎OdinMonkey来获得更快的执行速度。开发者可以将编写的代码编译为JavaScript,然后手动编写为asm.js代码,当浏览器执行该程序时,OdinMonkey引擎会让程序的执行速度更接近于本地应用。Mozilla未来可能会开发一些工具(类似于 LLJS)来自动生成asm.js代码。 随着技术的发展,未来JavaScript也许会跑得和native C一样快。 一些演示 2012年,Mozilla曾推出一款Web版的第一人称射击游戏演示BananaBread,今年5月份,Mozilla宣布与Epic Games合作将虚幻引擎3(C/C++实现)移植到浏览器上,并发布了基于虚幻引擎3的HTML5演示游戏Epic Citadel,这些游戏都是基于WebGL、 Emscripten和高性能的JavaScript子集asm.js实现,重新定义了3D游戏在浏览器中运行的性能,展示了高端游戏也可以很容易地移植到JavaScript 和 WebGL平台,同时不失性能和画面效果。 Mozilla的另一款支持多人在线的HTML5 游戏—— BrowserQuest。 随着HTML5新特性Full Screen API、Gamepad API和Mouse Lock API的完善,浏览器或将成为未来游戏的新战场。 增强版的JavaScriptJavaScript大量的扩展,在很大程度上弥补了JavaScript某些方面特性的不足。比如你可以使用如下这些工具或扩展来让JavaScript更强大。 安全性增强
静态类型特性
JavaScript的衍生品JavaScript如今在Web开发界的地位无法撼动,但是仍不断有一些新的语言出现,希望能够通过提供更强大、更完善、更优雅的特性来代替JavaScript。
更多工具可参见: http://altjs.org/ 最后几乎所有主流的语言都可以编译为JavaScript,进而能够在所有平台上的浏览器中执行,这也体现了JavaScript的强大性和在Web开发中的重要性。此外,互联网中还存在大量的工具,使得这些语言可以与 JavaScript进行互操作,我们将在以后的文章中详细介绍。 以上这些工具中,大部分都是开源项目,如果感兴趣,你也可以通过源码来了解这些语言之间进行转换的相关原理和技术。 |