GNOME Softwareの起動時間改善
「GNOME 40」の「GNOME Software」は起動時間が改善され、今までの約半分の時間で起動するようになりました。libxmlb周りのプロファイリング
開発者は「GNOME Software」が使用している「libxmlb」周りの処理に焦点をあて、プロファイリングを実施しました。プロファイリングにより、どの処理に大きなコストがかかっているのかを視覚化できます。
AppStreamからアプリの情報を取得
「GNOME Software」はUIに表示するアプリの情報を「AppStream」から取得しています。「GNOME Software」は「AppStream」のデータに対しクエリー(問い合わせ)を行い、様々なアプリの情報(メタデータ)を取得しています。
しかし「AppStream」はアプリの情報をXMLファイルで提供しており、直接XMLに対してクエリーを実行すると処理に大きなコストがかかります。
そこで「GNOME Software」は「libxmlb」を利用してXMLファイルからキャッシュを構築し、XMLのクエリーを高速化しています。
「GNOME Software」は「libxmlb」を経由してそのキャッシュからアプリの情報を取得することになります。
もちろん「AppStream」のデータが変更されれば、キャッシュもアップデートする必要があります。
起動時、大量のクエリーを実行する
さて「GNOME Software」は起動時、多くのアプリをユーザーに表示するため大量のXMLクエリーを実行し、アプリの表示に必要な情報を読み込んでいます。起動時間を短縮する方法の1つに、クエリーの実行数を減らす方法があります。
この種の最適化はすでに過去に実施されており、同種のさらなる最適化は難しそうです。
クエリー速度の向上
そこで今回クエリーの実行速度そのものを向上させる方法に着目し、クエリーの最適化が実施されました。クエリー実行時に今までヒープに割り当てていた処理をスタックに割り当てることで、メモリー周りの処理コストを削減しています。
起動時間が半分に
クエリー処理を見直した結果、キャッシュが変更されてから「GNOME Software」を初めて起動する際、「GNOME Software」の起動にかかる時間が今までの約半分に短縮されました。開発者のテストでは、最適化する前は「GNOME Software」の起動に25秒かかっていましたが、この時間が12秒に短縮されました。(-52%)
キャッシュは日々1、2回変更される可能性があり、このケースは「GNOME Software」においてよくあるケースであるとのことです。