Slide 1

Slide 1 text

STORES 株式会社 Ebisu.mobile #8 大忘年会 STORES kubell Kyash asken 2024年 12月 20日 @nekowen アプリ起動時間を80%高速化した話

Slide 2

Slide 2 text

自己紹介 小櫃 遼也 a.k.a nekowen STORES 株式会社 所属 iOSアプリエンジニア ねことポップコーンが好き X: @n3k0w3n 2

Slide 3

Slide 3 text

今日話すこと 3 レジアプリの起動時間を改善したよ!という話をします ※ここでいう起動時間とは「アプリを立ち上げてユーザーが利用可能な状態に なるまでの時間」を指します

Slide 4

Slide 4 text

レジアプリについて 4

Slide 5

Slide 5 text

始まりはCSからのご相談 5

Slide 6

Slide 6 text

まずはヒアリングを行う 6 ・アプリを起動して商品の読み込みが完了するまで数十分かかる ・途中でネットワークが切れてしまい度々リトライが発生している ・通信環境が原因ではなさそう

Slide 7

Slide 7 text

アイテムリストを全件取得し切るまでの流れ 7 アイテムリストを50件取得 数秒待機 次のPage Cursorを取得

Slide 8

Slide 8 text

リクエスト状況の確認 8 秒単位でリクエストに時間がかかっている

Slide 9

Slide 9 text

アイテムクエリの調査 9

Slide 10

Slide 10 text

アイテムクエリの調査 10

Slide 11

Slide 11 text

アイテムクエリの調査 11

Slide 12

Slide 12 text

アイテムクエリの調査 12 取得にかかるコスト = アイテム数xアイテムバリエーションx店舗数

Slide 13

Slide 13 text

検証 13 ・パターンA: 全く変更していないアイテムクエリの実行時間 ・パターンB: 在庫情報をログイン中店舗のみに絞ったときの実行時間

Slide 14

Slide 14 text

結果 14

Slide 15

Slide 15 text

その後… 15 他にも不必要な処理を見直した ・RemoteConfigによる待機時間の制御 ・アイテムリストのループ処理をSwift Concurrencyに置き換えてリファクタ リング

Slide 16

Slide 16 text

その後… 16 CSから起動時間が劇的に早くなったと連絡をもらった ・改善前と改善後の秒数としておよそ80%改善 ・副次的効果としてアイテム取得処理中のクラッシュが改善した

Slide 17

Slide 17 text

まとめ 17 ・GraphQLはクエリの書き方によってパフォーマンスが大きく変わる ・アプリの起動時間はユーザー体験に大きく関わってくる ・計測、大事