ほんとうは恐ろしいImage.network

496 Views

November 19, 24

スライド概要

Swiftエンジニアが猫画像を表示するアプリを開発する様子を紹介しています。アプリは簡単に実装できると思ったが、実際にはImage.network()がキャッシュしないことや、ListViewが全てをレンダリングするため、急激なリクエストが発生してしまいました。解決策として、CachedNetworkImageを用いたキャッシュ処理やListView.builderを使った効率的なレンダリングを提案しています。

profile-image

コードを書いて28年 KDDI DIGITAL GATEにパートナーとして参画中。 訃報自動送信/生存確認プラットフォーム 「tayorie」のco-founder。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ほんとうは恐ろしい Image.network @hummer / はまあ(SESフリーランスエバンジェリスト)

2.

自己紹介

3.

Yuji Yamamoto (@hummer/はまあ) ・朝起きて飯食ってコード書いて飯食って コード書いて寝てたら 24年経過 ・サラリーマン、起業を経て、 紆余曲折の 末、現在は SESフリーランス 8期目 ・推しは React/Flutter/Firebase/AWS ・PoC開発とエンジニア教育 の日々

4.

本題

5.

ほんとうは恐ろしい Image.network

6.

ある日 Swiftエンジニアは 思った

7.

ひたすら猫画像を 見るアプリを作ろう

8.

いまどきなら + でしょ?

9.

UITableView みたいに表示したいなぁ🤔

10.

ListView

11.

配列で並べるだけ! なんて簡単!

12.

ネットから画像を 非同期で表示するには?🤔

13.

Swiftなら だけど...

14.

Image.network(String url)

15.

つまり、こうじゃろ?

16.

ほぼ完成では?

17.

ちょっと デザイン 直したいな?🤔

18.

ちょっと直して

19.

Hot Reload!

20.

すごい! すぐに反映されてる!

21.

ちょっと直して

22.

Hot Reload!

23.

ちょっと直して

24.

Hot Reload!

25.

ちょっと直して

26.

Hot Re...

27.

28.

� ええ加減にせえよ?

29.

30.

31.

� リクエスト 多すぎやねん、ワレ

32.

原因

33.

原因 1. Image.network()はキャッシュしない

34.

原因 1. Image.network()はキャッシュしない 2. ListView()は全部レンダリングする

35.

原因 1. Image.network()はキャッシュしない 2. ListView()は全部レンダリングする 3. Hot Reloadで気軽に再実行

36.

� Hot Reloadのたんびに なんぼリクエストすりゃ 気が済むねんな?

37.

対策

38.

対策.1 ❌Image.network()ではなく ⭕CachedNetworkImage()を使え

39.

対策.1 ❌Image.network()ではなく ⭕CachedNetworkImage()を使え →Urlから取得した画像をキャッシュしてくれる

40.

対策.2 ❌ListView()ではなく ⭕ListView.builder()を使え

41.

対策.2 ❌ListView()ではなく ⭕ListView.builder()を使え →表示している領域+ αだけレンダリングしてくれる

42.

用法、用量を守って お使いください

43.

用法、用量を守って お使いください