リフレクションなしの Jackson シリアライザーをデフォルトで有効にする
以前から、Jackson が提供し、Quarkus アプリケーションで広く使用されている JSON のシリアル化とデシリアル化の効率を改善する方法を試してきました。パフォーマンスの観点から見ると、Jackson の主なボトルネックは、実行時にデータオブジェクトにアクセスしたり、データを入力したりするために Java のリフレクションに大きく依存していることです。この問題に対処するため、Jackson 向けにリフレクションなしのシリアライザーとデシリアライザーを生成するビルド時メタプログラミング アプローチを開発しました。
この記事 で、Quarkus でこの機能をどのように実装したか、そしてそれによってもたらされるパフォーマンスの改善について説明しました。それ以来、私たちはこの機能を強化し、バグを修正し、さまざまな Jackson 機能との互換性を改善するために継続的に取り組んできました。
リフレクションなしの Jackson シリアル化の設定
この機能は実験的な性質であったため、当初はオプトイン方式にしていました。Quarkus アプリケーションでリフレクションなしの Jackson シリアライザーとデシリアライザーを有効にするには、application.properties ファイルに次の設定を追加する必要がありました。
quarkus.rest.jackson.optimization.enable-reflection-free-serializers=true
ここ数カ月、この機能を試すユーザーが増え、提供されるパフォーマンス上の利点を活用するだけでなく、バグ、エッジケース、さまざまな Jackson 機能との互換性の問題を発見するのに役立ってくれました。これらは一つずつ対処してきました。全体として、コミュニティーから肯定的なフィードバックをいただいているため、次の明白なステップを踏むことを決定しました。
Quarkus 3.35 リリースでデフォルトで有効化
現時点では、Quarkus のテストスイート全体がこの機能を有効にした状態でパスしており、これまでユーザーから報告されたすべての互換性の問題に対処しました。したがって、次の Quarkus 3.35 リリースでは、この機能をデフォルトで有効にすることに決定しました。
可能な限り幅広いユースケースをカバーするために、この機能を有効にした状態でアプリケーションをテストし、できればパフォーマンスへの影響も測定していただくようお願いします。問題に遭遇した場合やフィードバックがある場合は、GitHub リポジトリーに報告するか、Quarkus コミュニティー チャネルでお知らせください。これは、この機能の安定性についてより確信を持ち、すべてのユーザーにスムーズな移行を保証するのに役立ちます。