BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JavaによるWebアプリケーション記述 - 代替手法に関する調査

JavaによるWebアプリケーション記述 - 代替手法に関する調査

原文(投稿日:2019/05/28)へのリンク

JavaScriptにコンパイルされる言語の人気が高まったことにより、Java仮想マシン(JVM)言語に習熟していて、JavaScript開発スタックに悩むことなくWebアプリケーションを開発したいと願う開発者には、JavaScriptに代わる選択肢が増えている。先頃発表された、簡易なアプリケーションを使用したGWT、TeaVM、JSweet、CheerpJ、Vaadin Flowのパフォーマンスおよびペイロード特性に関する分析では、ネイティブなJavaScript Webアプリケーションに対するパフォーマンス上のペナルティが、以前よりも縮小していることが示されている。

Java開発者のRenato Athaydes氏は先日、JavaScriptとJVM言語の比較を行った。比較の基準となるターゲットアプリケーションは単純なカウンタで、 React JavaScriptフロントエンドライブラリで実装されている。

シンプルリアクトカウンターアプリ

このカウンタアプリケーションを、5つのJavaフレームワーク(GWTTeaVMJSweetCheerpJVaadin Flow)を使用して実装した。これら5つのJava実装とネイティブなJavaScriptアプリケーションを、Javaプロダクトないしフレームワークの提供する最も基本的なツールを使用してカウンターアプリケーションを作成し、その後アプリケーションのサイズとパフォーマンスを測定するという、簡便な方法で比較したのだ。アプリケーションのサイズは、ブラウザの[ネットワーク]タブ(JavaScript以外の重いリソースに依存するフレームワークに有利となるようなバイアスを避けるため、すべてのタイプのリソースを対象とした)から取得した。パフォーマンスは、Google Chrome内に実装したLighthouseの監査ツールを使用して測定した。LightHouseのパフォーマンススコアは、Time to InteractiveSpeed IndexFirst Contentful PaintFirst CPU IdleFirst Meaningful PaintEstimated Input Latencyという、6つの重み付きメトリクスによって、重要度の高い順に評価される。

調査の結果から、JSweetとTeaVMが、Lighthouseの報告した First Contentful Paint(FCP)測定値において、ネイティブのJavaScript Reactアプリケーションを上回っていることが分かった。Googleのレポートによると、First Contentful Paintは、"ナビゲーションから、DOMのコンテンツの最初の部分をブラウザがレンダリングするまでの時間を測定したもの"である。"この数値は、ページが実際にロードされているというフィードバックが提示されるまでの時間なので、ユーザにとっては重要なマイルストーン"となる。大部分の実装が、LightHouseが優れたグローバルパフォーマンススコア(最大100で90以上)と見なす値を獲得している中で、CheerPJフレームワークは他と比較して、パフォーマンスが劣っていた。

性能比較

結果として得られたJavaフレームワークのランキングは、生成されたJavaScriptのサイズによって大部分が説明可能なものだ。

Imgur

こちらの結果も、各Javaフレームワークが同じ順序でランク付けされている。生成されたJavaScriptをブラウザが解析する時間は、そのサイズとは正の相関が、パフォーマンスとは負の相関があるため、これは予想されたことだ。

この調査には、現在Googleが支援するJavaからJavaScriptへの変換プログラムであるJ2CLは含まれていない。また、この調査で使用されているのは、ごく簡単なWebアプリケーションである。従って、その結果をそのまま大規模なWebアプリケーションに当てはめることはできないが、それでも、調査で検討したJavaフレームワークの違いを分析するのには役立つ。

例えば、CheerPJのサイズの大きさやパフォーマンスの低さは、それが実際にはJavaからJavaScriptへの変換ではなく、ブラウザに付属するJavaランタイムそのものである、という事実によって説明できる。逆にメリットとしては、CheerPJを使用する場合には、Swingアプリを含むコンパイル済みのjarファイルを、プラグインなしでブラウザ上で実行可能な点が挙げられる。

2006年にリリースされたGWTは、Google AdWordsなどでも使用されている、完成度の高いオープンソーステクノロジで、ユーザーインターフェイス構築用の一連のウィジェットとパネルが付属する。

TeaVMは、ブラウザ上で動作可能なJavaScriptとWebAssemblyを生成する、JavaバイトコードのAOT(ahead-of-time)コンパイラである、と説明されている。Javaのソースコードを必要とせず、コンパイルされたクラスファイルのみで実行することが可能だ。さらに、ソースコードはJavaである必要はなく、KotlinScalaもコンパイル可能である。

Jsweetは、それ自体をJavaからTypeScript/JavaScriptへのトランスパイラであると定義して、Javaから利用可能な、1,000以上の型付けされたJavaScriptライブラリを備えている。Jsweetでは、追加のツールやランタイムを必要とせずに、JavaScriptから、生成されたAPI /オブジェクトにアクセスできると主張しているが、Javaを完全にエミュレートしている訳ではないため、既存のJavaアプリケーション、特にユーザーインターフェースにSwingなどのJava独自のAPIを使用しているアプリケーションは、ある程度の修正が必要になる。

Vaadin Flowは、JavaでWebアプリケーションを構築するためのコンポーネントとツールのセットで、Springの組み込みサポートと、WebSocketを使用した自動サーバ /クライアント通信が特徴だ。対象とするWebアプリケーションは、すべてJava、あるいはJavaとHTMLを組み合わせて記述することができる。Vaadinのコンポーネントは、UX、パフォーマンス、アクセシビリティをモバイル用に調整したWebコンポーネントである、と説明されている。ただし、Vaddin Flowは、"(アプリのサイズに関わらず)300kに圧縮された"クライアント側エンジンを持っており、これがパフォーマンスを決定付けている。

この調査方法は、InfoQが以前に報じた、"A real-world comparison of front-end frameworks"というブログ記事からヒントを得たものだ。

この記事に星をつける

おすすめ度
スタイル

BT