性能改善について
新バージョンの性能改善の詳細
新しいLightFile v6.0.0以上(Batch/Shot)は、旧LightFile(v6.0.0未満)と比較して性能が改善されています。
主な改善点
1. 完全なバイナリプログラム化
旧LightFile(Node.js)
- Node.jsランタイムを同梱
- 起動時にランタイムの起動とモジュールのロードが必要
新LightFile(Go)
- 完全な単一バイナリファイル
- 依存関係なし、高速起動
2. メモリ効率の向上
処理方式の変更
旧LightFileはディレクトリスキャンと最適化を同時に進行していたため、メモリ消費量が急激に増加するタイミングがありました。
LightFile Batchは2段階処理に変更:
- スキャンフェーズ: まずディレクトリスキャンのみを行い対象ファイルをリストアップ
- 最適化フェーズ: 1ファイルずつ順次最適化処理を実行
この方式により、メモリ消費量を最低限に抑えることができます。
Go言語の効率的なメモリ管理
Go言語の効率的なメモリ管理により、さらに省メモリで動作します。
3. シンプルな単発利用のためのLightFile Shot
LightFile Batchは多機能ですが、シンプルに画像を最適化したいだけの用途では機能が豊富すぎる場合があります。
そのため、単発利用に特化したLightFile Shotを分離開発しました。
LightFile Shot
- 処理履歴管理なし
- バックアップ機能なし
- 通知機能なし
- 余計な機能を省いた高速処理
- シンプルな使用目的に最適
用途に応じてBatchとShotを使い分けることで、より効率的な画像最適化が可能になりました。
4. ライセンス認証のオフライン化
旧LightFileはライセンス認証時にサーバーとの通信が必要でしたが、新LightFileではオフライン認証を実装しました。
- サーバー通信不要
- ネットワーク環境に依存しない安定動作
5. 画像最適化のコアロジック改善
シングルバイナリ化による最適化
旧LightFileはNode.jsから外部プロセスとして画像最適化ツールを起動していましたが、新LightFileではC言語ベースのGo言語を使用してシングルバイナリ化しました。
旧LightFile(外部プロセス方式)
- 画像最適化のたびに外部プロセスを起動
- プロセス間通信のオーバーヘッド
- 複数プロセス起動による高メモリ消費
新LightFile(統合バイナリ方式)
- 画像最適化ロジックをバイナリに統合
- プロセス起動のオーバーヘッドを大幅に削減
- メモリ使用量の大幅な削減
- C言語ベースの最適化エンジンによる高速処理
実用的なメリット
- 高速起動: CI/CDパイプラインやcronでの実行時のオーバーヘッド削減
- 省メモリ: サーバーリソースの効率的な利用
- 依存関係なし: Node.jsのインストール不要
- オフライン動作: ネットワーク環境に依存しない安定した動作
- 低リソース消費: プロセス起動オーバーヘッドの削減による効率化