2

在 GWT web/production 模式下,Java 代码被编译成在浏览器中呈现的 Javascript 代码。

另外,我一直认为在 GWT 开发模式下,GWT 开发者插件将我的 Java 代码编译成 JavaScript 以在浏览器中呈现。但是在阅读了一些网站之后,我才知道没有将代码编译为 JavaScript 以在开发模式下在浏览器中查看它。

所以,我想知道:如果它们不是 JavaScript 代码,我在这种模式下在浏览器中看到的所有这些小部件是什么?我不明白。

请帮助理解这一点。

4

1 回答 1

6

开发模式的关键在于您的代码在 Java 中运行。如果您可以使用标准 Java 调试器,这是一个先决条件。您将在GWT 文档中找到高级概述。

魔术发生在JSNI 方法覆盖类型上:当一个类被加载时,它的所有 JSNI 方法都被提取,它们的 JS 主体被发送到浏览器,准备好执行(然后是 JavaScript),并且这个类被动态重写重新实现 JSNI 方法以调用浏览器(通过您安装在那里的 Dev Plugin 并由?gwt.codesvr=URL 中)执行相应的 JS 函数。这就是为什么 Java 对象在 JSNI 方法中被视为不透明句柄的原因;它们被分配了一个数字 ID,以便将 Java 对象与服务器端的虚拟 JS 对象配对。对覆盖类型进行了类似但更复杂的重写,并且在将 JS 对象传递给 Java 代码(作为覆盖类型)时使用相同的 ID 映射。

顺便说一句,超级开发模式(几乎)即时编译为 JavaScript 。

于 2012-09-18T20:03:14.580 回答