【问题标题】:Any downsides to excessively using JSNI calls in GWT?在 GWT 中过度使用 JSNI 调用有什么缺点吗?
【发布时间】:2012-05-18 17:48:34
【问题描述】:

这似乎是一个幼稚的问题,但是使用大量 JSNI 而不是仅仅坚持纯 GWT 是否有任何明显的缺点(性能方面)?

我之所以这么问,是因为当我使用 GWT 时,我发现自己必须处理非常具体的要求,而这些要求最好通过使用成熟的 Javascript 库来解决...

【问题讨论】:

    标签: javascript gwt jsni


    【解决方案1】:

    唯一的缺点是使用第三方库:您不会从 GWT 编译完成的死代码修剪中受益(也就是说,除非您以某种方式将库包装为 JSNI) .

    实际上,还有一个:因为 GWT 只会优化您的 JS 代码,如果用 Java 编写本可以完成的进一步优化,您将不会受益。这是因为 Java 是一种静态类型语言。

    除此之外,不,JSNI 对性能没有负面影响(在 DevMode 中实际上可能恰恰相反:从 Java 切换到 JS 和/或 Js 切换到 Java 的次数越多,它变得越慢;但这只是对于 DevMode,而在接下来的几个月中,这又将被弃用)。

    【讨论】:

    • 很好,简洁的答案! (也不是第一次)谢谢。
    【解决方案2】:

    我认为 JSNI 代码在开发模式下比较慢。然而,开发模式显然应该很快被超级草稿模式取代,见https://plus.google.com/110412141990454266397/posts/iqXo5AyHkyd

    另外,我不确定 GWT 能够在多大程度上分析和优化纯 Javascript 代码。在编译纯 Java 时,GWT 会进行大量内联和其他优化。

    另一个问题可能是加载库的额外往返行程。

    根据库 API 的复杂性(即,如果您需要包装大量的类),将类似的纯 Java 库转换为 GWT 可能更简单。但这显然不适用于 UI 库或其他严重依赖于 GWT 未涵盖的 Java 运行时部分的库。

    因此,如果现有成熟的 Javascript 库适合您的目的,最好将它们包装在 JSNI 中并按照您的建议进行操作。

    JSNI 边界本身不会产生任何额外的运行时开销。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 2016-03-18
      • 1970-01-01
      • 2010-09-27
      相关资源
      最近更新 更多