Flutterで効率よく非同期処理をやるにはどうすべきか(※未検証)
最近はいろんなプロジェクトに顔を突っ込みつつ課題解決をする仕事をしています。
その中で、FlutterでAPI通信やDBアクセスなど時間のかかる処理をUIの描画と合わせてどううまくやるのか考えています。
ネイティブ実装ではどうやるか
iOSであればDispachQueue、Androidであればcoroutineを使うことで、UIを描画するメインスレッドとデータ操作をする別スレッドを分けることが一般的になっています。
Flutter(Dart)はシングルスレッドで動く
一方でFlutterはNode.jsと同様に、基本DartがMain Isolateのシングルスレッドで動くようです。Future / Streamを使って非同期処理は記述できますが、イベントループになります。
JavaScriptの例にはなりますが、イベントループについてはこちらの資料がわかりやすかったです。
Isolateを複数立てれば並列処理ができる
DartではMain Isolateとは別のIsolateを立てることで並列処理ができるようになるようです。
詳しくはmonoさんの以下の記事が詳しいですが、isolateのスイッチングにオーバーヘッドがあるそうです。
また先日のFlutterKaigiでもKurogoma4DさんからIsolateに関する解説がありました。
質疑応答で、isolateを使うのとMethodChannelでDispachQueueやCoroutineを使うのとどっちが性能がでるかふと気になったのですが、実際に試してみないと分からなそうです。
Isolateで非同期処理やるのとMethodChannelで各OS側で非同期処理やるのどっちが性能いいのか気になっている。なんとなくIsolateのほうが遅そうな印象。 #FlutterKaigi
— takamii228 (@takamii228) 2021年11月30日
非同期処理をFlutterでやるか、ネイティブでやるか?
Flutterでアーキテクチャを考えるときにネイティブ実装との境目をどこに持つのかは一つの大きな関心毎です。
なるべくFlutter側に寄せればDartの割合が増えるので書くコード量は減りますが、その分Flutter(Dart)への依存度が増えるのでFlutter(Dart)の動作仕様の影響を受けます。この動作仕様のデメリットをネイティブ実装で補えるのか否かが気になりますね。
今度時間があるときに検証しようと思います(おい)
あと並列処理と並行処理もちゃんと区別せねば...。
2021年の振り返り的な何か
今年もやる。去年のはこちら。
2021年にできたこと
iOS、Androidアプリ開発の理解が深まった
2021年度もクライアントアプリ側を一式見る仕事を続けた。
iOSの証明書周りの細かいところも理解が深まった。細かい発見ネタはいくつかブログに起こしていた。
いい加減自分でアプリをサクッと作れるようになりたみ。
AWS SAPro を取得した
昇級要件を満たすためにずっと取ろう取ろうと思っていてサボっていたのだけど、今年ようやく取れた。
準備期間は3ヶ月ちょっとだったけどkoiwa clubを活用して無事一発で取れた。
ISUCONに出た
今年も同じメンバーでISUCONに出られた。少しずつ順位が上がっているので、来年度も開催されれば頑張りたい。
ブログを月1ペースで投稿できた
去年に引き続いて月1投稿ペースを維持できた。月一回くらいがちょうどいいな。
振り返り
良かったこと・できたこと
去年の知識貯金を使いつつ、いろんなプロジェクトをつまみ食いしつつそこで力を発揮できて、さらに知識を上乗せできたような気がする。
良くなかったこと・できなかったこと
- 登壇発表しなかったこと
- 積ん読が増えたこと
- 業務環境的に開発系の作業率が大幅に減ったこと
- 結局競プロを再開しなかったこと
今年は登壇発表を一切していなかった。業務ではCICDについて整理できたり、Flutterのメリデメとかをまとめられたので、またどこかでアウトプットしたい。
今年度は職場環境がわりと変化があって、業務内容も管理系の仕事の割合が増えてきた。もう1.0で一つのプロジェクトを見るということはないのだろうかと思うと悲しい気持ちになる。 いい感じにうまくやって、注力できるところに注力できるようにしたい。
2022年の抱負的な何か
- iOS / Android / Reactで個人アプリを作ってみる
- GCP Associate Cloud Engineer / Professional Cloud Architectを取る
- AWS SA DevOps Proを取る
- TOEICスコア(785)を更新する
- AtCoderを再開する
- ISUCONに出る(開催されれば)
- 月1ブログ投稿を継続する
- 3年後、5年後の自分の仕事・人生の具体的なイメージを持つ
- 健康を維持・推進する
2022年はGCPも少しやっていこうと思う。このままだとスマホアプリの人になってしまうので、そろそろバックエンドもみたい。両方わかるからこそ見られる世界で何か知見が得られたらいいな。
あと夏頃に過去最高の体重を記録してしまったので10月11月と減量して7kgくらい痩せた。そして風邪引いた。まだ標準体重より少し多いので、もう少し減量したい。
まとめ
去年のブログでは上限の鬼の話をしていた、懐かしい。
2021年は人生に少し進捗があったので、2022年は人生の方もぼちぼち頑張りたい所存。
2021年にお金を払ったサービス一覧
2021年にお金を払ったサービスの一覧をまとめた。光熱費は除きます。
2020年版はこちら
新規に契約したもの
Netflix 1490円 / 月
自粛生活で見たい動画があったので契約した。ででーん。
TOHOシネマズシネマイレージ会員 300円 / 年
去年から契約してたけど書き忘れてたので記載した。シネマイレージ会員だと無料会員だと3日前の24時から座席予約できるのが3時間早い21時からできる。
SPGアメックスカード 34100円 / 年
Marriott Bonvoyのマイルとホテルステイに誘われて契約。メインカードもこれに移行した。
解約したもの
Evernote Plus 3100円 / 年
全然使わなくなったので解約してNotionに移行した。
IntelliJ IDEA Ultimate Personal 11110円 / 年
1年間全く使わなかったので更新をやめた。
新宿御苑年間パスポート 2000円 / 年
緊急事態宣言中の延長措置が訳わからなくなって結局更新していない。次回作るときは再作成だな。
継続で契約しているもの
Zoom 20145円 / 年
実家とのビデオ通話や友人とのZoom飲みで使っている。
Apple Music 9800円 / 年
2年目に突入。新曲がすぐに聞けるのがいい。
マネーフォワードME 5300円 / 年
安定。もうこれ無しじゃ生きられない。年金ネットを足したら資産がめっちゃ増えた。
Apple Developer Program $99 / 年
アプリ配信はしていないのだけど、仕事の検証を手元でさらっとやるのに大活躍した。
Amazon Prime 4900円 / 年
Prime Videoにお世話になった。Amazonでの買い物はだいぶ減ったなぁ...。
dマガジン 440円 / 月
今年もお世話になった。コスパいい。
Google One 2500円 / 年
Google Driveは100GBあるけどまだまだ空きがある。
To Me Card 2200円 / 年
利用頻度は減ってるけど、年会費分は今年も回収できた。
日本経済新聞Wプラン 5900円 / 月
実家と折半継続。
Nintendo Online 2400円 / 年
モンハンでお世話になった。
NHK 23891円 / 年
少し値下げされた。
Norton 360 デラックス 12100円 / 3年
前回買ったやつが期限が切れたので。
IIJ mio ギガプラン(15GB + 2GB) + 通話放題 3531円 / 月
今まで書いてなかったので記載。ギガプランの登場で安くなったのでSIMを1枚解約して2枚体制にした。通話放題も今度安くなるらしい。
インターネット代 990円/月 + 3465円/月
これも書いてなかったので。これがないと生きていけない。
以上。