Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
stand.fmの最近の取り組み: アプリ起動速度の改善/improvement-of-spe...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
stand.fm
October 02, 2021
Programming
2.9k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
stand.fmの最近の取り組み: アプリ起動速度の改善/improvement-of-speed-startup-app
stand.fm
October 02, 2021
More Decks by stand.fm
See All by stand.fm
stand.fm会社紹介資料
standfm
0
1.4k
stand.fmのTypeScriptへの移行と活用/migrating-to-typescript-standfm
standfm
0
2.6k
ReactNative製アプリがAndroidだと遅いという問題に立ち向かった話/the problem that React Native apps are slow on Android
standfm
1
3.5k
LIVEの負荷対策と監視について / About LIVE load countermeasures and monitoring
standfm
0
8.9k
声でつながる、 優しい世界を創るUI/UX
standfm
4
650
stand.fm(Android)におけるreact-native-track-playerの改善/Improvement of react-native-track-player on standfm Android app
standfm
0
440
stand.fmにおける開発体験とパフォーマンスの向上 / Development Experience and Performance improvement
standfm
1
7.8k
React NativeアプリでコラボLIVE配信 / Collaboration Live Streaming with React Native App
standfm
1
4.4k
エンジニア向け会社紹介資料 / company deck for engineers
standfm
7
68k
Other Decks in Programming
See All in Programming
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
370
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1k
最近”作らせてる” ローカルAIアプリの話
akit37
0
460
残高管理から台帳サービスへの進化
artoy
1
200
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
350
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.6k
Agents on Rails - Rails at Scale 2026
irinanazarova
0
540
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Jetpack Compose Mechanisms
skydoves
2
740
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
470
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
780
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Odyssey Design
rkendrick25
PRO
2
870
How STYLIGHT went responsive
nonsquared
100
6.3k
Music & Morning Musume
bryan
48
7.4k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
How to build a perfect <img>
jonoalderson
1
6.1k
Mobile First: as difficult as doing things right
swwweet
225
10k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Transcript
stand.fmの最近の取り組み アプリ起動速度の改善 株式会社stand.fm エンジニア 外松 俊尚 2021/10/02 React Native Matsuri 2021
外松 俊尚 stand.fm エンジニア React Nativeはstand.fmで初めて触りました 愛媛からフルリモート @toshi__toma
stand.fmは誰でもかんたんに アプリで収録・LIVE配信ができる音声 プラットフォーム React Nativeで開発してます
最近のstand.fmの取り組み
最近のstand.fmの取り組み • ライブの安定化 • コラボライブ • アプリ起動速度の改善 • 音声の再生速度の改善 •
新機能開発 • 技術移行 • etc
最近のstand.fmの取り組み • ライブの安定化 • コラボライブ • アプリ起動速度の改善 • 音声の再生速度の改善 •
新機能開発 • 技術移行 • etc
アプリ起動速度 • stand.fmは開発から2年以上が経過 ◦ 起動速度が問題になってきた • 色んな事情で起動時に行われる処理の増加 ◦ 新機能の追加、認証、初期化処理など •
最近、改善に取り組んでいます
起動速度の計測
アプリ起動速度 • まず大事なのは計測 ◦ いま振り返っても、計測が一番大事 • 計測ツール ◦ Sentry Performance
Monitoring ◦ Firebase Performance Monitoring • 既に導入されていたSentryで計測を開始
React NativeアプリをSentryでPerformance Monitoring @sentry/react-native https://docs.sentry.io/platforms/react-native/performance/
計測の導入 • 最初は単純にrootのindex.jsの最初で計測を開始 結果を見るとなんか速い。こんなに速いはずがない • 計測を開始してるのは、JSが実行される段階 ◦ 「アイコンをタップ」した直後くらいから計測を開始したい
react-native-startup-time • react-native-startup-timeを利用 ◦ https://www.npmjs.com/package/react-native-startup-time ◦ getTimeSinceStartup() • ネイティブモジュールの初期化タイミングからの経過時間を JavaScript側で取得
◦ 計測開始のタイムスタンプを作成 ◦ 正確ではないけど、十分と判断 • ストップウォッチで測ったりして、体感とかなり近い結果が出た
起動速度計測の定義 • 計測開始 ◦ ユーザー:アイコンがタップされた直後 ◦ システム:ネイティブモジュールの初期化タイミング • 計測終了 ◦
ユーザー:Splashスクリーンから抜けた ◦ システム:Splashスクリーンの終了 (react-native-splash-screen:Splashスクリーンの終了タイミングを調整 )
無事に起動速度を計測できた データの例 • バージョンごと、iOS/Android単位での推移も確認できる
各計測にはボトルネックになりえる処理をマークしておいた データの例
ボトルネックの洗い出し • 計測結果からReact Native側とstand.fm側の処理に分類して ボトルネックを洗い出した • stand.fm ◦ 起動時に必須ではないネットワークリクエストや初期化処理 ◦
トップページのデータ読み込み • React Native ◦ JavaScriptの実行開始まで
ネットワークリクエストの改善 起動時に必須ではない処理の改善
ネットワークリクエストの改善 • 直列になっていた処理を並列化 • デフォルトタブ以外の情報のレスポンスを待っていたのを改善 • APIのモニタリング結果を見て遅いリクエストの精査
起動時に必須ではない処理の改善 • 計測結果や起動までのコードをチェック ◦ 計測結果を見て初めて分かることが多い • 起動時に必須ではないけど、時間がかかってる箇所があったの で改善
アラートの設定 • 起動時の処理は気をつけないといつの間にか処理が増えていく ◦ 新機能、ログ、お知らせ、認証などなど • 意図せず遅くなっている状態に気付きたい Sentryでアラートを設定した ◦ 閾値より遅くなるとSlackに通知
トップページのデータ読み込み
トップページのデータ読み込み • トップページを表示するために必要な情報を全て取得していた
トップページの改善 • 起動時はファーストビューに見える範囲の情報を取得 ◦ 残りは起動に必須とせずに別で取得させるようにした • react-native-shimmer-placeholder ◦ ファーストビュー以降は取得までは シマーを表示させるように
• トップページの情報をサーバーサイドで キャッシュさせてレイテンシの改善など
Hermes
Hermes • もともとAndroidではHermesに移行していた • React Native v0.64にアップデートしたタイミングでiOSも有効化 ◦ JSの実行までの時間が短縮された!! •
しかし、Hermesが原因でクラッシュするIssueがあり、いまは一時 的にOFFにしてる ◦ React Native v0.66で改善しそう??
Hermes化の効果 • 圧倒的に起動速度が改善した • Hermesの有効化前後のバージョンで50%tileで650ms速くなった • 再度有効化できればもっと早くなりそう
改善結果
改善結果 • 対応したこと ◦ ネットワークリクエストの改善 ◦ 起動時に必須ではない処理の改善 ◦ トップページのデータ取得の改善 ◦
(Hermes化) • 起動速度が速くなった ◦ 50%tile: ⬇1.33s ◦ 95%tile: ⬇3.15s
We are hiring! エンジニア積極的に募集中です https://corp.stand.fm/recruit 詳細はこちら • CTO候補 • VPoE候補
• クライアントエンジニア • バックエンドエンジニア • 機械学習エンジニア • 配信基盤エンジニア • QAエンジニア • エンジニアリングマネージャー • UI/UXデザイナー 積極募集しているプロダクト開発メンバー
現在抱えている技術課題・今後の技術的チャレンジ ▶アプリ起動速度を高速にしたい ▶音声編集機能リッチ化 写真アプリがスマホだけでお洒落な加工を可能にしたように、機材や知識がなくてもアプリだけで、 高クオリティの音声配信をシンプルなUI/UXで実現したい (例)
複数BGM、BGMの fade in&out、ジングル挿入、効果音挿入、音声スニペットのコピペ、など ▶アプリの複雑化への対応 開発者が増え、機能が増えてもメンテナンスしやすい構造にしたい ▶異常状態を検知できるようにしたい コラボ収録時に片方だけ音が入っていない・音割れしているなど、単純なエラーではない異常状態を検知したい ▶高クオリティなサービスをユーザーに届けるためのテストの自動化 リグレッションテストの自動化、ネットワーク状態・電話の割り込み・ディスク容量など特殊な状態のテスト クライアント
stand.fm エンジニア • iOS、Androidのネイティブが得意な人 ◦ JSだけでは実現が難しい要件も多い! ◦ チームとして異なる強みの人がいる • webのReactは経験してるけど、ネイティブアプリ開発は初
◦ RNでは、Reactの知識が普通に生かせる ◦ stand.fmは全部がJS • コードの歴史も長くなってきた ◦ 技術移行などにも注力
None