在GWT中过度使用JSNI调用的任何缺点?

时间:2012-05-18 08:59:17

标签: javascript gwt jsni

可能看起来像一个天真的问题,但使用很多JSNI而不仅仅是坚持纯GWT有明显的缺点(性能明智)吗?

我问,因为当我使用GWT时,我发现自己必须处理使用成熟的Javascript库最佳处理的非常具体的要求......

2 个答案:

答案 0 :(得分:5)

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

实际上还有另外一个:因为GWT只会优化你的JS代码,所以如果用Java编写的话,你不会受益于进一步的优化。这是因为Java是一种静态类型的语言。

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

答案 1 :(得分:1)

我认为JSNI代码在开发模式下速度较慢。但是,开发模式显然应该很快被超级草稿模式替换,请参阅https://plus.google.com/110412141990454266397/posts/iqXo5AyHkyd

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

另一个问题可能是加载图书馆的额外往返。

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

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

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