Snapアプリの大幅な起動時間短縮
「Snap」はアプリケーションをパッケージングし、隔離された環境でアプリを実行する仕組みを提供します。特定のLinuxディストリビューションに依存しない
特定のLinuxディストリビューションに依存せず、様々なLinuxディストリビューションで「Snap」及び「Snap」で提供されるアプリを利用できます。いわゆるアプリケーションコンテナですね。
この仕組みにより開発者は様々なLinuxディストリビューションにアプリを横断的に提供でき、そしてユーザーは自身が利用しているLinuxディストリビューションに捕らわれることなくアプリを利用できます。
コンテナならではの課題
「Snap」が持つ課題の一つは、リソースの共有が限られるため、メモリーやディスク使用量が増大したり、ネイティブに動作するアプリよりも余計に起動時間がかかってしまうことです。もちろん「Snap」にはそれ以上の利点もありますが、debやRPMパッケージで提供されるネイティブアプリよりもリソースの使用量は増加傾向にあります。
「Snap」でもユーザーからアプリの起動に時間がかかるとのフィードバックが数多く寄せられています。
この課題は開発者が何年もの間認識している課題であり、日々改善や解決に向けて取り組んでいる課題です。
Snapパッケージのインストールと展開
「Snap」では、アプリやアプリの動作に必要なソフトウェアを一つにまとめてパッケージとしてアプリを提供しています。(インターフェースによるソフトウェアの共有も可能ですが、ここでは扱いません。)
ユーザーがアプリをインストールするとSnapパッケージがインストールされます。
そしてその中身が「/snap」に展開(マウント)されます。
マウント状況を確認すると、以下のようにパッケージが「/snap」にマウントされていることが分かります。
パッケージはSquashFS
パッケージは「SquashFS」であり、これは読み取り専用の圧縮されたファイルシステムになっています。「Snap」の「SquashFS」ではデフォルトの圧縮アルゴリズムに「XZ」を採用しています。
「XZ」の高い圧縮率によりパッケージサイズを削減していますが、ファイルシステムの展開時には相応の処理コストが掛かります。
アプリの起動時間に影響を与える
ファイルシステムの展開はアプリの起動時間に影響を与えるため、ユーザーによってはこれが原因でアプリの起動が遅く感じられることがあります。特にアプリがメモリ上にキャッシュされていない状態で起動する場合(コールドスタート)、この傾向が顕著になります。
逆にアプリがメモリ上にキャッシュされている状態で起動する場合(ホットスタート)、ネイティブアプリとの起動時間の差はほとんどありません。
圧縮形式の変更による起動時間の改善
そこで圧縮アルゴリズムの変更が検討され、「LZO」の採用とテストが実施されました。「LZO」の採用により圧縮率が下がるため、パッケージサイズは増大します。
その一方でファイルシステムの展開にかかる時間が削減されるため、アプリの起動時間が短縮されます。
起動時間が2倍から3倍早くなった
テストではSnap版「Chromium」が使用され、パッケージサイズと起動時間のテストが実施されました。パッケージサイズは「XZ」で約150MBでしたが、「LZO」では約250MBに増大しています。
コールドスタート時の起動時間の比較では、「XZ」に比べ「LZO」では約2倍から3倍早くなっています。
ネイティブアプリとの起動時間を比較しても、それほど遜色ない差になっています。
またホットスタートでは元々ネイティブアプリとの起動時間の差はほとんどありませんし、「XZ」と「LZO」を比べても大した差はありません。
今後も改善は続く
「Snap」に対する改善はこれで終わりではありません。今後も継続的に改良や最適化が行われていきます。