Pixelfed内部の画像リサイズ処理、Intervention Imageライブラリを介してGDかImageMagickに投げられるのだけど、元の画像が大きいとそれを開くだけでメモリをやたら食うので、JPEGヒントを活用して改善できないか考えている。VPSのメモリに限りがあるので、ピンポイントでしか動かない処理のためにジョブワーカーに割り当てるメモリをあまり増やしたくない。
ImageMagickを使えば可能そうだが、Intervention ImageがJPEGヒントの指定に対応していない感じ。どうしようね。
これ、どうもPixelfedのオリジナルではなくて、オリジナルライブラリがあるようだ。
https://github.com/kornrunner/php-blurhash
それはともかく、高々640x480の画像に対するBlurhash計算が128MBで足りないのは本当か?実験してみよう。
BlurHashのC言語実装をPHP拡張モジュールにコンパイルすることを試みた。高速化の効果は十分あり。あとはメモリ消費の改善効果がどれくらいあるかな。
[PHP8対応] PHP拡張モジュールを自作してBlurHashの計算を高速化する https://qiita.com/everylittle/items/21467bee51402ed33e6a
ローカルのテスト用環境で、Pixelfedが動いているPHPのコンテナに拡張モジュールをインストールして動かしてみた。
RSS 25128KBなので、130MBほど減らせた。しかも実行時間も1回あたり2秒→0.1秒にまで短縮。これなら上出来!
あとはPixelfed側のBlurHash生成コードを書き換えれば完成だ。