【 Flutter 】Flutter を 基礎 から 学習 ( パフォーマンスチューニング ) part280 パフォーマンスを意識した実装

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は パフォーマンスチューニング ( part280 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( パフォーマンスチューニング ) part279 パフォーマンスを意識した実装

引き続き、パフォーマンスチューニングについて学びます。

パフォーマンスを意識した実装

ウィジェットの再構築を意識する

ウィジェットツリーの深さや型を変更するときはGlobalKeyを使う

ウィジェットツリーの深さを変更する場合がある場合はサブツリーの共通部分をGlobalKeyを持つStatefulWidgetラップすることを検討してください。

記述されている単語は理解できる(知っている)のですが文章としてみると難解です。

「ウィジェットツリーの深さを変更する」というのはどういう状態なのでしょうかね?

「サブツリーの共通部分」???

まずはGlobalKeyを使わない例です。

以下のような結果になりました。

確かにホットリロードするたびにcall MyText#createElement()が出力されていますね。

次はGlobalKeyを使用した例です。

ホットリロードをしてもcall MyText#createElement()が出力されなくなりました。

再構築が行われていない証拠です!・・・とGIFをアップロードしようとしたのですがブログサーバのリソースが足りずアップローできません😅

KeyedSubrtreeというのが本書の「サブツリーの共通部分」に該当するようですね。

今回初登場です。このウィジェットは以下のように紹介されています。

KeydSubtreeは、Keyを指定できない設計の悪いウィジェットにKeyを指定できるクラスです

皮肉が混ざっているようですが筆者は嫌な経験をしたのでしょう。

ここで分かったのは「Keyを指定できないウィジェット = 悪」という構図です。

これには注意しないといけませんね。

最後に

とても便利なGlobalKeyですがメモリを消費するしFlutterの良い部分(reactive)をつぶしかねないので多用はよくないとのことです。

今日はここまで!