1

Oracle は、jdk6 に削除された rhino を含めました

削除された機能の 1 つは、rhino js からバイトコードへのコンパイラーです。

アプリケーションレベルで含めることは可能ですか?

jsr223 呼び出しを変更せずにパフォーマンスを向上させたい

4

1 に答える 1

0

私はそれを働かせました

基本的に必要なことは、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 呼び出しに多くのオーバーヘッドが追加されることを期待しています。

于 2013-05-24T13:19:23.630 に答える