Elemental
Ray Cromwell,高级软件工程师
更新于 2012 年 6 月
Elemental 是一个用于在 GWT 中进行快速、轻量级、底层 Web 编程的新库。它旨在供那些习惯于使用 JavaScript 程序员使用的浏览器 API 的开发人员使用。我们认为它将成为移动和桌面 Web 应用程序的优秀“瘦”库。
内容
Elemental 包括所有 HTML5 功能,当然包括 DOM 访问,但也包括前沿功能,如 WebGL、WebAudio、WebSockets、WebRTC、Web Intents、Shadow DOM、文件 API 等等。我们能够做到这一点,因为我们直接从 JavaScript 引擎使用的 WebIDL 文件生成 Java 代码。
Elemental 还包括高性能集合和一个新的 JSON 库。这些库在浏览器或服务器 (JVM) 环境中都能同样出色地工作。
性能
Elemental 的设计是为了允许 GWT 编译器生成高性能 JavaScript,而没有开销。它通过仅使用JavaScript 覆盖类型。来实现这一点。此外,集合类直接映射到底层 JavaScript 集合,没有任何开销。
使用示例
Elemental 使用 Java 接口隐藏了它使用的多数生成的覆盖类型。JS API 实例可以通过 Window
或 Document
接口获取。以下是一个使用 Web Audio API 播放声音的简单示例。
package com.myapp;
import elemental.client.*;
import elemental.dom.*;
import elemental.html.*;
public class ElementalExample implements EntryPoint {
public void onModuleLoad() {
Window window = Browser.getWindow();
AudioContext audioContext = window.newAudioContext();
Oscillator osc = audioContext.createOscillator();
osc.setType(Oscillator.SQUARE);
osc.connect((AudioParam) audioContext.getDestination(), 0);
osc.getFrequency().setValue(440.0f);
osc.noteOn(0);
}
}
通常,可以通过调用以 Document.createXXXElement
模式开头的方法来构建 HTML 元素,其中 XXX 可以是 Select
或 Video
等元素。允许使用 new
关键字来构建实例的 JS API 位于 Window.newXXX
上,其中 XXX 表示底层 Javascript 构造函数名称。
注意事项
Elemental 仍在开发中。由于它是由 IDL 规范自动生成的,并且 HTML5 的这些规范随着时间的推移而迅速变化,因此没有为生成代码进行单元测试,并且对前沿 HTML5 的使用尚未经过测试,可能会出现问题。
Elemental 还引入了一组新的原生 JS 集合,它们与 Java 集合不兼容。
目前,Elemental 是从 WebKit IDL 文件生成的,并且包含许多对供应商前缀的浏览器扩展的引用。使用这些草案规范扩展可能会导致代码在 Firefox、Opera 或 IE 上无法运行。Elemental 的后续版本将包含 shim 生成功能,以强制生成的代码跨所有浏览器使用非供应商前缀的 API。