Slide 1

Slide 1 text

© DMM © DMM CONFIDENTIAL SwiftUI Performance 不要なViewの再描画と更新を抑える

Slide 2

Slide 2 text

© DMM 自己紹介 • 細田大志 • 2019年 中途入社 • 動画配信開発部 • DMMTVの開発 2

Slide 3

Slide 3 text

© DMM 3 • Viewの再描画と更新の仕組み • Identity • Property • Equatable • Viewの再描画と更新を抑える方法 • デバッグとInstruments アジェンダ

Slide 4

Slide 4 text

© DMM 4 • 再描画 • Viewを0から生成し直し表示する • ViewのIdentityが変化した場合 • 更新 • 必要なViewを更新して表示する • Viewのプロパティが変化した場合 Viewの再描画と更新

Slide 5

Slide 5 text

© DMM Identity SwiftUIはアプリの更新において同じか異なる要素かをIdentityによって認識 します。 SwiftUIには2種類のIdentityがあります。 • Explicit Identity • Structural Identity 5

Slide 6

Slide 6 text

© DMM Explicit Identity 明示的な値によって管理されるIdentity。 6

Slide 7

Slide 7 text

© DMM Structural Identity View構造と型によって管理される 7

Slide 8

Slide 8 text

© DMM Property • @State • @StateObject • @ObservedObject • @Binding • let • など 8

Slide 9

Slide 9 text

© DMM Equatable Viewが同値かによって更新するかを判定 9

Slide 10

Slide 10 text

© DMM 可能な限り分岐を統合する 可能な限りModifierを活用する 10

Slide 11

Slide 11 text

© DMM Viewには必要最低限な値を渡す プロパティが変更されると、View全体が更新される 11

Slide 12

Slide 12 text

© DMM Observation オブジェクトのプロパティをSwiftUIのViewが監視できるようになる。 12

Slide 13

Slide 13 text

© DMM Viewを分割する 複数のPropertyを持つViewのBodyを分割する 13

Slide 14

Slide 14 text

© DMM Viewを比較可能にする 14

Slide 15

Slide 15 text

© DMM ForEach ステーブルなidを使う 15

Slide 16

Slide 16 text

© DMM Debug • Self._printChanges • Viewが再描画または更新されるタイミングと要因を確認することができる • print(type(of: self.body)) • bodyの型情報を確認することができる 16

Slide 17

Slide 17 text

© DMM Instruments • Time Profiler • 実行された関数にかかった時間 • Hangs • 応答していないメインスレッドを検 出し、対応するインターバルをハ ングの可能性があるものとしてラ ベル付けされる • View Body • 作成されたビューの数と作成にか かった時間 17

Slide 18

Slide 18 text

© DMM ご静聴ありがとうございました