私はGWTの実装JREライブラリエミュレーションテクノロジーに興味があります。
GWTはJavaライブラリをどのようにエミュレートしますか?
JavaScriptでHashMapをどの程度効果的に実装しましたか?純粋なJavaScriptで実装されていますか、それともコードで使用されている場合はJavaソースとしてコンパイルされていますか?
開発(ホスト)モードのgwt-devライブラリにいくつかの実装が存在することを理解しています。プロダクションコードの実装は同じですか?
私はGWTの実装JREライブラリエミュレーションテクノロジーに興味があります。
GWTはJavaライブラリをどのようにエミュレートしますか?
JavaScriptでHashMapをどの程度効果的に実装しましたか?純粋なJavaScriptで実装されていますか、それともコードで使用されている場合はJavaソースとしてコンパイルされていますか?
開発(ホスト)モードのgwt-devライブラリにいくつかの実装が存在することを理解しています。プロダクションコードの実装は同じですか?
エミュレートされたJREライブラリはここで確認できます。それらのほとんどについて、GWTは対応するJavaScriptを使用しますが、GWTが独自のJavaScript実装バージョンを持っている場合があります。
HashMapsの場合、組み込みのJavaScriptバージョンは文字列->値マップのみを提供するため、GWTはオブジェクト->オブジェクトマップをサポートする独自の実装を使用します。詳細については、こちらをご覧ください。
また、本番(コンパイル済み)モードと開発モード(デバッグ)の違いを理解するには、「コンパイルとデバッグ」セクションを確認してください。
コードをオンラインで閲覧できます。たとえば、HashMap、またはもっと興味深いことにAbstractHashMapです。ご覧のとおり、いくつかのJSNIメソッド(native
キーワードと/*-{ ... }-*/
構文を持つメソッド)があります。ただし、エミュレーションコードの多くのメソッドは、JSNIメソッドの上に構築されています。これらは「高レベル」のJavaメソッドとして記述されています。
このエミュレーションコードは、独自に作成するのと同じように、実際には単純なGWTコードです(ただし、もちろん、JSNIコードの割合は統計的に高くなっています)。そして、<super-source>
このメカニズムを使用します。このように、同じクラスのクライアントコードは、開発モードと本番モードで異なる場合があります。