HTML5下一步如何发展?

开发
计算机程序员一直受跨平台问题的困扰,自从需要涉及第二个平台开始。自那之后,问题的数量便迅速增加。如今,开发人员至少需要同时针对四个操作系统(以及更多细分的系统)进行开发,运行这些操作系统的设备具有各种外观、尺寸大小、分辨率、持久度、输入方法、运营商网络、连接速度和状态、用户界面的规定、应用商店、部署及更新机制等。

计算机程序员一直受跨平台问题的困扰,自从需要涉及第二个平台开始。自那之后,问题的数量便迅速增加。如今,开发人员至少需要同时针对四个操作系统(以及更多细分的系统)进行开发,运行这些操作系统的设备具有各种外观、尺寸大小、分辨率、持久度、输入方法、运营商网络、连接速度和状态、用户界面的规定、应用商店、部署及更新机制等。

全球许多开发人员一度曾将Java*视为跨平台开发的***。确实,Sun*(现在为Oracle)的这种结构化语言持续在解决许多跨平台问题,但它也会引入不少障碍,而其中最重要的一个障碍之一便是,类结构甚至会给最微小的程序功能造成沉重负担。在开发人员转为使用浏览器来进行应用交付时,Java带来的负担变得更加沉重;Java小应用程序对浏览器而言是不透明的黑箱,因为该语言对开发人员是封闭的(尽管我们非常尊重JCP)。

在Java使浏览器大战愈演愈烈的同时,一种名称相似的解析语言横空出世。这种语言开始名叫Mocha,后来改为LiveScript,***定名为JavaScript*。实践证明,它在一些方面比Java更加实用,因为它能够与浏览器进行交互,并能够使用HTML的级联样式表单 (CSS) 来控制内容显示。JavaScript支持很快便成为每个浏览器的标准功能。现在它就成为了HTML5编程语言,该语言被万维网联盟视为下一种标记语言的标准。

为了更好地了解HTML5的成功原因、现状以及未来发展方向,《Intel® Software Adrenaline》杂志采访了英特尔软件与服务事业部软件开发产品部的资深***工程师Moh Haghighat。Moh是英特尔针对Firefox*浏览器开发的***JavaScript即时编译器 (JIT) 的技术领导。他还领导了***并行JavaScript JIT和并行浏览器布局引擎原型的开发工作,这二者都是在Firefox环境下进行开发。他目前负责领导英特尔的HTML5技术战略工作。

Intel Software Adrenaline:对于跨平台开发,HTML5为何优于Java?

Moh Haghighat:启动Java小应用程序会让我想起声名狼藉的“加载Java”状态栏。它在启动时会看到大量进度条,而不像如今的Web浏览器那样具有快速响应性,这起码会让人感到厌烦。这是该语言的根本问题,而[Adobe] Flash*在某种程度上解决了这个问题。哪怕是运行一小段Java代码,也需要将整个JVM载入浏览器,而且在开始执行这些代码前还可能要执行一大串类初始化程序。对于服务器端的代码,您在服务器上针对大量客户端重复运行相同的代码,这种情形还可以接受。但在客户端,您希望运行的代码来自许多不同应用,看到如此大量的进度条会让人无法承受。运行Java的***位置被证明是服务器端的中间件,Java应用服务器先驱WebLogic*便是一款优异的中间件。对于客户端开发来说,这也是HTML5优于Java的技术原因之一。虽说如此,在建立可管理编程语言的可行性,以及为更高效的高级语言(如JavaScript、PHP*、Python*和Ruby*)奠定基础方面,Java发挥了重要作用。

Java还有一些确实非常出色的特性,可支持高效的代码生成,而几乎无需昂贵的编译器分析,如针对寄存的基于类型和基于偏移量的歧义消除。

另一个问题在于Sun对Java项目的运作。Java一开始并不是开放技术,同时Web技术也发生了演变。我认为Java没有成功的主要原因是Sun忽略了Web浏览器;在JavaScript变得日益强大的过程中,我们没有看到Java在浏览器方面有多少创新。JavaScript异步使用模型 (AJAX) 让浏览器成为出色的交互平台,这使得许多基于Web的应用大受欢迎,如Google* Docs。同时,这些应用的复杂性不断增加。例如,Gmail*的JavaScript代码从2004年的近万行增加到2010年的近50万行,仅在六年间就增长了50倍(参见图1)。随着Web在全球的迅猛增长,已有数百万网页使用JavaScript,因此就已安装的代码库而言,JavaScript目前是影响力***的语言。在与浏览器集成方面,Java根本无法与JavaScript相提并论,因为JavaScript是浏览器的“原生”语言。另外,采用CSS和JavaScript的浏览器对UI和逻辑实现了完全分离,而Java平台则没有。

HTML5提供了更具吸引力的备选方案。您编写的应用可在任何类型的计算设备上运行,无论是电话、平板电脑、笔记本电脑、台式计算机还是电视。如果设备支持HTML5,它就能在该设备上运行。您甚至无需进行编译;您只需要编写程序,它就会被分发和执行。

 

Lines of JavaScript Code: JavaScript代码的行数

Gmail 50x larger in 6 years: Gmail在6年内增长了50倍

图1:Adam de Boor,Google

ISA:JavaScript和HTML已存在多年。最近有什么变化使HTML5对跨平台开发如此有效?

MH:首先,在过去五年里,JavaScript的速度大幅提升,快了100倍(参见图2),这在很大程度上得益于JavaScript JIT的出现。由于Web应用复杂性和成熟度的显著增加,JavaScript JIT成为一项不可或缺的技术。在JavaScript性能方面,2011年的***Internet Explorer*版本比2001年的Internet Explorer快了100倍以上。其次,通过HTML5还突然引入了非常多的新功能。这可能是自浏览器推出以来,HTML实现创新最多的一次。现在,HTML的渲染方式已经与过去完全不同。在HTML5开始得到广泛采用之后,其性能有了显著提升,新功能也不断增多。

 

Sunspider runs per minute: 每分钟运行Sunspider的次数

Internet Explorer JavaScript performance improves 100x: Internet Explorer JavaScript性能提升了100倍

图2:Luke Hoban,Microsoft

在技术采用方面,我观察到了另一个值得关注的趋势,IT部门日益发现HTML5***吸引力,这是因为人们会在工作中使用各种不同设备。在如今的业务环境下,所涉及的智能手机、平板电脑和便捷式电脑达数百种之多。HTML5是唯一的可以让IT的应用跑在所有的设备上的方案。另外,公司也无力针对每种设备类型开发相关应用并提供支持。现在,基于HTML5的响应式设计模式不断出现,这种设计模式能够使内容适应设备的显示屏尺寸。这些全都是HTML的重要组成部分,因为利用CSS和JavaScript您能动态地适应不同的设备。

ISA:由于没有静态类型化功能,JavaScript一直因其仅局限于小型应用程序而饱受批评。这种批评有道理吗?

MH:JavaScript将来会提供类、模块及类型化功能。负责下一个JavaScript版本相关工作的ECMAScript*委员会正在研究类的问题,类有利于维护工作。Java有类,C++也有类。JavaScript采用基于原型的继承模式,这将允许您实现类,但它不强制要求以某种特定方式实现类。Java有自己针对类的对象模式;目前JavaScript语言没有采用特定的类模式。它使让用户能够实现自己的类版本。

出于软件工程的原因,在有大量开发人员参与项目的情况下,人们可能需要特定的类模式。对于大型项目,您可能需要做一些限制,例如需要定义特定的编码原则等等。如果每个人都以自己的方式来使用JavaScript的话,其灵活性有可能会产生负面作用。

让我们类比一下老早以前,FORTRAN等编程语言都使用GOTO语句。但在20世纪70年代,Edsgar Dijkstra和其他人士发现以非结构化方式使用GOTO语句有害无利。因此,程序员被要求使用结构化的编程原则,而不要随意使用GOTO语句,从而使编程语言和应用更易于理解和维护。而在JavaScript变为低级语言,并在其基础上能够实现大量高级语言时,同样的事情也正在发生。JavaScript已变为所谓的“Web的汇编语言”。

ISA:您能给我们举一个这种情形的例子吗?

MH:最近,利用限制和结构方面最令人振奋的例子,是Mozilla正在开发的一个名为 “asm.js” 的项目,以及另一个有关联的名为“Emscripten”的项目,这基本上是一个将 LLVM位码转换为JavaScript 和HTML***PI的编译器。(LLVM是Apple*公司赞助的一个项目,旨在为C/C++及其他语言开发低级虚拟机编译器基础架构和语言前端)。Emscripten实质上是将C++转换为JavaScript。

Asm.js是Emscripten的一个可选目标,可以提供近乎原生的性能,与经优化的原生代码相比,开销通常降低2倍,而目前的全JavaScript则约为5倍。虽然JavaScript使用动态类型,但asm.js的要求(如类型推断和注释)仍然完全基于JavaScript规范。使用asm.js,用户能够编写被证明是静态类型的代码。因此,在装载时,用户能够验证代码实际上是静态类型。提前编译器能够生成极其高效的代码而无需进行额外检查,这与动态类型语言不一样;这有助于同时提高灵活性和代码效率。

如我们所说,这些语言都在不断发展演变,将能够把大段计算密集型代码(如性能库和游戏引擎)转换为JavaScript,并使其可应用于全球每一个设备成为可能。JavaScript正在成为高级语言的目标语言。

ISA:目前有哪些与JavaScript相关的语言项目?

MH:现在有一种叫CoffeeScript*的语言,Microsoft也在开发TypeScript*语言,它是JavaScript的超集。Google的Dart*是一种采用类概念的新语言,也编译为JavaScript。我不认为有人能让整个Web都更换Web浏览器的主语言。然而我相信,各种语言的优异特性汇集到一起,将会对JavaScript规范产生影响,而这些特性也将会添加到规范中。这基本上实现了演变、向后兼容性以及增量改变。

ISA:英特尔直接推动了HTML5和JavaScript的发展。您能否给我们介绍一下这方面的相关工作?

MH:英特尔在并行技术领域一直居于领先地位,并行性使HTML5能够满足多核的要求。您需要利用并行性提高响应速度和电源利用率。我们对Firefox*布局引擎的CSS规则匹配实现了并行化,使其具有可扩展性。从编程语言的角度看,HTML5有一个称作“Web Workers”的并行性API。它非常适用于粗粒度的后台线程,但如果您希望执行大量小型并行[任务],Web Workers则无法胜任。英特尔一直与Mozilla在并行阵列方面开展合作;我们在英特尔实验室的同事首先建立了它的原型。目前我们正在努力解决实施中的所有问题,以使其进入到ECMAScript,即JavaScript的官方语言规范中。

另外,我们还与Mozilla和Google进行合作,以确保现在已有(如Sandy Bridge和Ivy Bridge等等)的SIMD矢量功能可以真正采用JavaScript进行编程。也就是说,如果您的JavaScript代码对数据进行并行的操作,那么该代码会真正实现矢量化,同时开发人员使用这些功能时能够保证代码的执行。这些功能终将进入标准之中。

结束语

面对操作系统和设备不断增多的趋势,全球许多开发人员都在寻找经济高效的方法来创建他们的应用。开发人员一度将Java视为跨平台开发解决方案。与较老的语言相比,Java有许多优势,但Java没有跟上移动平台的快速创新步伐。开发人员现在转为使用HTML5及其核心技术,即JavaScript和CSS,来实现所需的***功能和跨平台可操作性,以便在当今的应用市场上取得成功。

据Haghighat说,英特尔工程师继续在英特尔平台上对HTML5引擎进行优化,并为HTML5增加新功能。英特尔将HTML5视为迈向透明计算时代的重要步骤。为进一步加快HTML5的广泛采用,英特尔现在还提供了英特尔® XDK,这是一个完整的开发套件,可帮助开发人员在Android、Firefox* OS和iOS等各种平台上,构建、测试、调试、打包及部署其HTML5应用。

资源

英特尔® XDK HTML5开发环境:http://html5dev-software.intel.com/

英特尔® 开发人员专区:http://software.intel.com/zh-cn/html5

关于作者

Edward J. Correia自1980年以来一直在计算机行业工作,那时他便开始销售(并偶尔侵入)Atari 公司和 Commodore公司的电脑。除了为RH+M3撰稿,Correia目前还担任CRN Test Center的编辑主任。CRN Test Center是一家计算机与网络测试实验室,于1995年在Correia的协助下成立。在脱离CRN的母公司United Business Media的10年期间,Correia曾担任《Software Test & Performance》杂志的编辑和SD Times的执行主编。

责任编辑:林师授 来源: 51CTO
相关推荐

2015-05-19 11:31:11

LTELTE网络

2018-09-20 21:13:41

5G网络无线技术

2018-05-18 10:18:20

云计算云厂商物联网

2017-01-17 15:57:47

大数据特朗普数据湖泊

2014-09-04 10:01:12

2013-08-12 14:42:20

UI设计UX设计设计

2011-05-19 16:17:34

软件测试

2017-05-02 14:17:50

存储数据闪存

2022-05-21 23:38:01

云原生IT企业

2023-11-13 11:10:16

2024-10-15 15:42:50

2017-01-18 12:16:37

OpenFlowSDNONF

2019-05-21 05:09:23

物联网数据IOT

2013-11-25 13:30:47

微信开发

2018-09-13 12:51:52

云计算私有云公共云

2021-05-30 15:58:51

云计算DevOpsIT

2021-01-19 10:47:16

5G工业互联网大数据

2022-01-07 18:23:37

工业物联网IIOT物联网

2011-05-05 10:25:35

Windows Ser

2013-10-15 09:36:23

SUSE CloudOpenStack
点赞
收藏

51CTO技术栈公众号