scala-zero-formatterのパフォーマンス改善やakka-httpサポートとか
https://github.com/pocketberserker/scala-zero-formatter/releases/tag/v0.7.0
表題の件以外にもlz4とzstdへの変換をサポートしてみたりしました。 この2つはあくまでとりあえず程度なので速度そんなにでないですが……。
速度改善の話
- 余分な型クラスを除去
- 一時期のバージョンでいれていたが今は無くても動く(もしかしたら昔も動いたのかもしれない)
- ついでに一部パッケージを統合
- unsafeモジュールでのStringのエンコード方法変更
- https://github.com/google/protobuf/blob/v3.2.0/java/core/src/main/java/com/google/protobuf/Utf8.java を借りることにした
- あまり速度に関係ないかもしれない、という噂はあるが今回は計測したら速くなったので
- case classの全フィールドのバイナリサイズがわかっている場合はmacroでバイナリサイズを算出する
- 最後のresize(arrayコピー)が減る
内部でprotobuf-javaのUnsafeを使っているので、そりゃScalaPBと速度で勝負できるよね…という。 とはいえデシリアライズがまだ若干遅いことがある問題?もあるのでなんとかできないか調査中。
akka-http
MarshallerとUnmarshallerをつかえば簡単にできそうだったので作ってみた、という。 JSON系ライブラリはspray-jsonは公式さぽーとだったり、他のライブラリも既にライブラリがあったりします。
msgpack用のライブラリもそのうち誰かがつくるのではないでしょうか?
lz4, zstd
最初に書きましたがまだお試しパッケージです。 そのため思ったほど速度がでないと思います(LZ4のデシリアライズはその特性上十分早いけど)。
あと、バイナリサイズを考慮して使うか決めないと圧縮前よりサイズが増える、なんてこともなくはない?