SWIFTUIリストビュー最適化比較


WWDC 21は、SWIFTUIのリストビューのパフォーマンスとアニメーションの最適化を提供します.
これには、リストビューユニットの再使用とアニメーションの変更が含まれます.
Identifiableをリストで使用するモデルに継承すると、リストビューのセルが再使用され、アニメーションも非常にきれいに表示されます.
これらの内容をプロジェクトに直接適用することにしました!
// Before
List {
  ForEach(viewModel.state.orderList.indices, id: \.self) {
  	// 셀 그리기~
  }
}

// After
List {
  // orderList의 모델에 Identifiable을 상속하였기에 가능
  ForEach(viewModel.state.orderList) {
  	// 셀 그리기~
  }
}
Beforeコードでは、orderListという配列のモデルがIdentificableを継承していないため、「id://self」でループを返さなければなりません.
各モデルが一意ではなく、最終的にユニットを再使用しないため、最適化に失敗しました.
AfterコードはIdentifiableをモデルに継承し、各モデルはユニークで、ユニットを再使用できます.
viewModel.state.orderListを更新してリストビューのセルを再描画しても、既存のセルは再描画されずに使用されます.

一番大切なのは、このように変えてから、アニメの違いがどうなっているのかを見てみましょう。



(注意!特にリストが更新された場合、どのセルが新しいのか、どのセルがまだ存在するのかに注意してください!)

Before(Identificableは適用されません)



After(Identifiable Apply)



確認しましたか?
選択したユニットを集中的に見るとすぐに確認します
Beforeのリストではユニットのユニークさが認識されないため、新しいものと古いものを区別せずにアニメーションが点滅しているのがわかります.
Afterリストでは、データが変更されていないセルはそのままで、データが変更されたセルはアニメーション化されます.
次のビデオを見ると、より明らかな違いが感じられます!

プレイヤーが気づかない微妙な変化ですが、このような小さな品質の集まりが良いアプリを生み出すと思います.