可能看起来像一个幼稚的问题,但是使用大量 JSNI 而不是仅仅坚持纯 GWT 是否有任何明显的缺点(性能方面)?
我问是因为当我使用 GWT 时,我发现自己必须处理非常具体的要求,这些要求最好通过使用成熟的 Javascript 库来解决......
可能看起来像一个幼稚的问题,但是使用大量 JSNI 而不是仅仅坚持纯 GWT 是否有任何明显的缺点(性能方面)?
我问是因为当我使用 GWT 时,我发现自己必须处理非常具体的要求,这些要求最好通过使用成熟的 Javascript 库来解决......
唯一的缺点是使用第三方库:您不会从 GWT 编译完成的死代码修剪中受益(也就是说,除非您以某种方式将库包装为 JSNI)。
实际上,还有另一个问题:因为 GWT 只会优化您的 JS 代码,如果用 Java 编写的话,您将无法从进一步的优化中受益。这是因为 Java 是一种静态类型的语言。
除此之外,不,JSNI 对性能没有负面影响(在 DevMode 中实际上可能恰恰相反:你从 Java 切换到 JS 和/或 Js 到 Java 的次数越多,它变得越慢;但这仅适用于 DevMode,在接下来的几个月里,这又会被弃用)。
我认为 JSNI 代码在开发模式下比较慢。但是,开发模式显然应该很快被超级草稿模式取代,请参阅https://plus.google.com/110412141990454266397/posts/iqXo5AyHkyd
另外,我不确定 GWT 能够在多大程度上分析和优化纯 Javascript 代码。在编译纯 Java 时,GWT 做了很多内联和其他优化。
另一个问题可能是加载库的额外往返行程。
根据库 API 的复杂性(即,如果您需要包装大量类),将可比较的纯 Java 库转换为 GWT 可能更简单。但这显然不适用于 UI 库或其他严重依赖于 GWT 未涵盖的 Java 运行时部分的库。
因此,如果现有成熟的 Javascript 库适合您的目的,最好将它们包装在 JSNI 中并按照您的建议继续。
JSNI 边界本身不会产生任何额外的运行时开销。