単純な質問のように思えるかもしれませんが、純粋な GWT に固執する代わりに JSNI を大量に使用することには明らかなマイナス面 (パフォーマンスに関して) はありますか?
私が GWT を使用していると、成熟した Javascript ライブラリを使用するのが最善の方法である非常に具体的な要件に対処しなければならないことに気付いたからです...
単純な質問のように思えるかもしれませんが、純粋な GWT に固執する代わりに JSNI を大量に使用することには明らかなマイナス面 (パフォーマンスに関して) はありますか?
私が GWT を使用していると、成熟した Javascript ライブラリを使用するのが最善の方法である非常に具体的な要件に対処しなければならないことに気付いたからです...
唯一の欠点は、サードパーティ ライブラリを使用することです。GWT コンパイルによって行われるデッド コードのプルーニングの恩恵を受けられません(つまり、何らかの方法でライブラリを JSNI としてラップしない限り)。
実際には、もう 1 つあり、GWT は JS コードのみを最適化するため、Java で記述されていれば可能だったさらなる最適化の恩恵を受けることはありません。これは、Java が静的型付け言語であるためです。
それ以外には、いいえ、JSNI はパフォーマンスに悪影響を及ぼしません (DevMode では、実際にはまったく逆になる可能性があります。Java から JS および/または Js から Java に切り替えるほど、遅くなります。ただし、それは DevMode の場合のみです。これは、今後数か月で廃止される予定です)。
開発モードでは JSNI コードの方が遅いと思います。ただし、開発モードはすぐにスーパードラフトモードに置き換えられる予定です。https: //plus.google.com/110412141990454266397/posts/iqXo5AyHkyd
また、GWT が純粋な Javascript コードをどの程度分析および最適化できるかはわかりません。純粋な Java をコンパイルするとき、GWT は多くのインライン化やその他の最適化を行います。
もう 1 つの問題は、ライブラリをロードするための余分なラウンド トリップである可能性があります。
ライブラリ API の複雑さによっては (つまり、大量のクラスをラップする必要がある場合)、同等の純粋な Java ライブラリを GWT に変換する方が簡単な場合があります。しかし、GWT でカバーされていない Java ランタイムの部分に大きく依存する UI ライブラリやその他のライブラリでは、明らかに機能しません。
したがって、目的に合った既存の成熟した Javascript ライブラリがある場合は、それらを JSNI でラップして、提案どおりに進めるのがおそらく最善です。
JSNI 境界自体は、追加のランタイム オーバーヘッドを作成しません。