我不是JS开发人员,但我试图了解GWT编译器转换为JS的java代码在我们的大型应用程序中找到内存增加的原因。
有些时候,我看到一些变量被赋予“_”,例如
_ = com_google_gwt_event_shared_GwtEvent.prototype = new java_lang_Object;
这些分配在代码中的许多地方。这是什么意思 ?
答案 0 :(得分:3)
GWT编译器使用JavaScript prototype chains对Java类型层次结构建模。 _
符号由编译器和简短的JSNI方法用作全局临时变量。在生成的脚本的顶部范围内,您应该看到类似
// Define the JS constructor(s) for the type
function com___GwtEvent() {}
// Inherit methods from the supertype by prototype chain
_ = com___GwtEvent.prototype = new java_lang_Object;
// Attach polymorphically-dispatched methods to the new type
_.someInstanceMethod = function(a,b,c){.....}
// Static-dispatch methods
function $someOtherMethod(this$static, d, e) {...}
如果您看到具有this$static
参数的方法,则编译器推断Java表达式instance.someOtherMethod()
不是多态的(可能通过类型收紧)并避免中间符号查找的开销运行时。