Oracle は、jdk6 に削除された rhino を含めました
削除された機能の 1 つは、rhino js からバイトコードへのコンパイラーです。
アプリケーションレベルで含めることは可能ですか?
jsr223 呼び出しを変更せずにパフォーマンスを向上させたい
Oracle は、jdk6 に削除された rhino を含めました
削除された機能の 1 つは、rhino js からバイトコードへのコンパイラーです。
アプリケーションレベルで含めることは可能ですか?
jsr223 呼び出しを変更せずにパフォーマンスを向上させたい
私はそれを働かせました
基本的に必要なことは、rhino の org.mozilla.javascript.optimizer パッケージを含めることだけです。
ただし、オラクルが rhino 実装の名前空間を変更したため、プロジェクトにドロップするだけでは簡単ではありません。
したがって、間違った名前空間を指す大量の文字列を含むパッケージを移植する必要があります (クラス生成用)。
また、オプティマイザーを内部の rhino コンテキストに挿入する必要がありました。
Class c = Class.forName("sun.org.mozilla.javascript.internal.Context");
Field field = c.getDeclaredField("codegenClass");
field.setAccessible(true);
field.set(c, org.mozilla.javascript.optimizer.Codegen.class);
「自動注入」方法もある可能性があります-Rhinosコンテキストクラスは、特定のパッケージのCodegenクラスを自動的に期待します-コンテキストクラスのオラクルポートに依存しますが、ソースが見つかりませんでした..
しかし、このアプローチには大きな欠点があります。
codegen ポートは特定の rhino バージョンを対象としており、すべての vm バージョンで機能しないか、vm の更新で壊れる可能性があります
そのため、jsr233 API を削除し、rhino をライブラリとして直接使用しました。また、パフォーマンスが大幅に向上しました。jsr233 API によって、一部の js 呼び出しに多くのオーバーヘッドが追加されることを期待しています。