CheerpJ 2からの移行
CheerpJ 3はCheerpJ 2の完全な再実装であり、そのため後方互換性はありません。
スクリプトタグ
CheerpJ 4をページに含めるには、以下のコードを使用してください:
<script src="https://cjrtnc.leaningtech.com/4.3/loader.js"></script>互換性の破壊的変更
新しいアーキテクチャを設計する際、私たちの目標はCheerpJ 2.3を可能な限り置き換えることでした。この目標はほぼ達成されたが、一部のケースでは、機能を廃止し、より優れた代替案に置き換える必要がありました。
cheerpjInit は非同期になりました
ランタイムAPIは、cheerpjInitが呼び出され、その Promise が解決されるまで公開されません。
したがって、他の関数を使用する前に必ずcheerpjInitをawaitしてください。
cheerpj-dom.jar の削除
JavaからJavaScript関数を呼び出すには、cheerpjInitのnatives オプションを使用するようになりました。詳細については、JNIガイドを参照してください。
com.leaningtech.client パッケージを広範に使用していた場合は、CJDomライブラリ(Leaning Technologiesによって管理されていません)をチェックしてください。
cheerpjRunJarWithClasspath の削除
java -jarを使用する場合、JARファイルがすべてのユーザークラスのソースであり、他のクラスパス設定は無視されるため、この機能には実際の使用例がありませんでした。
CheerpJWorker の置き換え
CheerpJは、特別な設定なしでWeb Workerにインポートできるようになりました。単にワーカーからimportScripts を呼び出してCheerpJをロードし、通常通りCheerpJを使用してください。
CheerpJWorker クラスは削除されました。
importScripts("https://cjrtnc.leaningtech.com/4.3/loader.js");
// 通常通りCheerpJを使用(async () => { await cheerpjInit(); const lib = await cheerpjRunLibrary("/app/example.jar"); // ...)();cjNew および cjCall のライブラリモードAPIへの置き換え
cjNew および cjCall は、cheerpjRunLibraryに置き換えられました。
// CheerpJ 2cheerpjInit();cheerpjRunJar("/app/library.jar");let obj = await cjNew("com.library.MyClass");await cjCall(obj, "myMethod");// CheerpJ 3await cheerpjInit();const lib = await cheerpjRunLibrary("/app/library.jar");const MyClass = await lib.com.library.MyClass;const obj = await new MyClass();await obj.myMethod();その他の主要な変更点
事前コンパイル(cheerpjify.py)の廃止
事前コンパイルなし: CheerpJ 2.3では、良いパフォーマンスを得るために、JARファイルをカスタムバイナリコンパイラで後処理する必要がありました。コンパイラは各入力JARに対して.jar.js ファイルを生成していました。CheerpJ 3では、以前のバージョンよりも優れたパフォーマンスを発揮する高度なJITエンジンを搭載しています。.jar.js ファイルの削除により、アプリケーションの起動時にダウンロードが必要なデータ量が大幅に減少することができます。
CheerpJ 3ではダウンロードは提供されません。
- AOT最適化: CheerpJ 3はJITコンパイラのみを使用し、そのため、JARファイルの前処理(例:
.jar.jsへの変換)は不要です。 --natives: JNI関数の実装は、nativesオプションを使用してcheerpjInitに渡す必要があります。詳細については、JNIガイドをご覧ください。
ClassLoaderの正式サポート
CheerpJ 2.3ではClassLoaderのサポートが非常に限られていました。 .jar.jsファイルの事前コンパイルが必要であったため、OpenJDKによって提供される標準のクラスローダーのみがサポートされていました。CheerpJ 3.0では、Javaが期待する通りにクラスローダーを適切に使用することで、この状況を大幅に改善しています。
com.leaningtech.handlers HTTPハンドラーは不要に
以前のCheerpJ 2では、HTTP(S)リクエストを機能させるために特別なJavaプロパティを設定する必要がありましたが、これはもう必要ありません。
cheerpjAddStringFileの廃止とcheerpOSAddStringFileへの名前変更
cheerpjAddStringFile 関数は、その動作をより適切に反映し、CheerpXと統一するためにcheerpOSAddStringFileに名前が変更されました。旧名は後方互換性のために引き続き使用可能です。