Slide 1

Slide 1 text

趣味でつくる アバター×アバター マッチングアプリ ~Performanceチューニング編~ BOXP

Slide 2

Slide 2 text

自己紹介 • 一箱さん (の体を借りたBOXP) • 某Web企業でソフトウェアエン ジニアをしています • 好きなLispはClojureです

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

製作中のアプリ • VRChat、Virtual Castなどから 好みのアバターを自動で探して くれるサービス • IPhone・Android向けWebアプリ としてリリース予定 • VRじゃなくてごめんなさい • 所謂PWA(Progressive Web Apps)を目指して製作中

Slide 5

Slide 5 text

なぜWeb? • 無名のアプリなので インストールの手間があるとその まま直帰してしまう… 多くの人に触ってほしい • このスライドも社内勉強会の資料 を再編集したもの 実験的な技術を試して 業務に活かしたい

Slide 6

Slide 6 text

なぜWeb? • 無名のアプリなので インストールの手間があるとその まま直帰してしまう… 多くの人に触ってほしい • このスライドも社内勉強会の資料 を再編集したもの 実験的な技術を試して 業務に活かしたい

Slide 7

Slide 7 text

とは言え インストールの手間がなくても Webページがもっさりしていると 使ってもらえない

Slide 8

Slide 8 text

もっさりしないために Hito Hubで何をしたか

Slide 9

Slide 9 text

状況に応じて 必要なパフォーマンス を満たす

Slide 10

Slide 10 text

Webアプリ 4つの側面 (RAILモデ ル) • Response: ユーザーの入力に対する応答中の状態 • Animation: アニメーション再生中の状態 • Idle: ユーザーの入力を待機している状態 • Load: コンテンツ読み込み中の状態 引用元: RAIL モデルでパフォーマンスを計測する https://developers.google.com/web/fundamentals/performance/rail

Slide 11

Slide 11 text

快適な パフォーマンス の目安 •100ミリ秒以内の応答 •これよりも遅いと操作と反応のズレを感じる Response •10ミリ秒以内に画面をレンダリング •1000ms / 60fps - ブラウザによるレンダリング時間 (約6ms) =約10ms Animation •アイドル時間を利用したタスク分担 •100ミリ秒以上かかる処理はアイドル時間まで後回 し •ユーザー入力へのレスポンスが最優先 Idle •読み込みは1000ミリ秒以内に •1000ミリ秒より長いとユーザーの集中力が切れて しまう Load ※Google調べ

Slide 12

Slide 12 text

Hito Hubですべて満たすまで 最適化してみました

Slide 13

Slide 13 text

全ての入力に対して 100ms以内に応答する 100ms以内に応答が間に合わ ない場合は別の応答を返す • Rippleを表示させるなど 応答処理と他の処理を同時に 実行させない • リソースの取得などは別スレッド (WebWorkerなど)で行うか後回しに する Response

Slide 14

Slide 14 text

アニメーションを60fps で動かす アニメーションが必要なカードだけ別 レイヤーに • will-change: transform;スタイルによって別レ イヤーへ • 重ね合わせによるピクセルの計算をスキッ プできる 透過・座標移動のみでアニメーション を実現させる • transform,opacityスタイルを使う Animation

Slide 15

Slide 15 text

読み込み時間を 1秒以内に Load JavaScriptファイルは分割して 必要な分だけロードさせる • 追加のJavaScriptファイルが必要なと きにはじめてロードする 他の画面に必要なファイルを prefetchしておく • WebWorkerを使って画面の処理を 邪魔せず先読みしておく

Slide 16

Slide 16 text

最適化の結果

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

最適化の甲斐あって なんとかサクサク動くよう になった

Slide 19

Slide 19 text

~Fin~

Slide 20

Slide 20 text

最後に告知的なもの

Slide 21

Slide 21 text

7月末までにリリース予定!

Slide 22

Slide 22 text

Thanks!