Flutter 2.88は、アプリの起動時間の改善、メモリフットプリントの削減、開発者がパフォーマンスの問題を簡単にプロファイリングできるようにすることに重点を置いている。これに伴い、Googleは新しいDartバージョンであるDart 2.15を発表した。ワーカーのIsolateが改善され、コンストラクタのティアオフを導入しており、列挙型を拡張している。
アプリの起動待ち時間を短縮するために、Flutter 2.8では、Dart VMガベージコレクターのいくつかの欠点の対処をしている。つまり、プラットフォームビューの作成中のシリアル化を減らし、フォントマネージャーの同時初期化を可能にした。これらの変更により、特にローエンドデバイスでパフォーマンスが大幅に向上する可能性があるとFlutterチームは述べている。
これらの改善により、ローエンドのAndroidデバイスで実行した場合のGoogle Payの起動レイテンシが50%短縮され、ハイエンドデバイスで10%の改善に至った。
Flutterアプリがローエンドデバイスで苦労していたもう1つの領域は、メモリであった。メモリ消費を削減するために、Dart VMのサービスIsolateには独自のバンドルがあり、ロードを延期して初期メモリフットプリントを削減することができる。メモリ内のどのページを再利用できるかをOSにより正確に通知することで、メモリ占有率をさらに10%削減できる。
開発者がアプリのパフォーマンスを簡単に検査できるようにするために、Flutter 2.8は現在、トレースイベントをAndroid systraceに送信するようになっている。これは、他のAndroidネイティブトレースイベントと一緒に視覚化できることを意味する。同様に、Flutter 2.8に付属する新しいDevToolsには新しい拡張トレース機能が含まれている。これは、ウィジェットを構築し、オブジェクトをレイアウト、ペイントする時にトレースされるイベントのセットを強化するためのものだ。
Dartに目を向けると、最新のリリースではIsolateが改善されている。これは、メッセージパッシングスレッドとほぼ同じような、同時実行の単位である。現在、Isolateをグループで作成できるため、内部構造の一部を共有できる。これにより、既存のグループに新しいIsolateを、メモリ占有の観点で、より速くより安価に追加できる。さらに、同じグループ内のIsolateは、メッセージを使ってオブジェクトを渡す代わりに、オブジェクトを共有できる。これに加えて、メッセージの受け渡しは、小から中サイズのメッセージで最大8倍高速になる。また、関数型、クロージャ、スタックトレースの受け渡しをサポートする。
Dart 2.15の新しい言語レベルの機能は、コンストラクタのティアオフである。つまり、対応するクラス名に.new
(例えばText.new
)を追加することで参照できる、コンストラクタへのポインタである。以前は、Dartは関数のティアオフのみをサポートしていたため、たとえば、UIオブジェクトのコンストラクタを関数に渡すことができなかった。
新しいDart機能に関する最後のポイントとして、dart:core
のenum
APIが拡張され、指定された列挙型のString
値を取得し、名前で列挙型値を検索し、列挙型の名前と値のペアのマップを取得できるようになった。
enum MyEnum {
one, two, three
}
void main() {
print(MyEnum.one.name); // Prints "one".
print(MyEnum.values.byName('two') == MyEnum.two); // Prints "true".
final map = MyEnum.values.asNameMap();
print(map['three'] == MyEnum.three); // Prints "true".
}
Flutter 2.8とDart 2.15の両方に、ここで説明できるより多くのものが含まれている。そのため、詳細については公式発表を見逃さないようにしてください。