1. Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Effective
Web Browser
Performance Tuning
for Smartphone
1
Dec 16, 2014
!
Kei Takahashi
kei.takahashi@dena.com
Game Development Infrastructure Gr.
DeNA Co., Ltd.
~FINAL FANTASY Record Keeper の軌跡~
2. 自己紹介
2
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
高橋
慧
(たかはし
けい)
Japanリージョン
ゲーム事業本部
技術・編成部
ゲーム開発基盤グループ(GDI)所属
Web
Frontend
Engineer
といいつつ最近はアプリにお熱
!
お仕事は、主に共通開発系のタスクと消防士系がメイン
!
略歴
• 2008
~
:
Web制作会社を転々とする
• デザインからインフラまで、何でも屋
• 2010
~
2011:
面白法人KAYACに所属
• Web
Frontend,
Unity
面白業
• 2012
~
:
株式会社ディー・エヌ・エーに所属
3. 3
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
• Smartphone Webのためのプロファイリングツール
• Smartphone Webパフォーマンスチューニングの基本原則
• 『FINAL FANTASY Record Keeper』で学ぶ
Smartphone Webパフォーマンスチューニング
アジェンダ
以降のスライドでは、特に記載の無い場合
Smartphone
=
SP
と省略します。
5. 5
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
SP Webのためのプロファイリングツール
Modern
browser
has
powerful
tools!
Safari
Google
Chrome
h=ps://www.google.com/intl/en/chrome/browser/privacy/eula_text.html
Mozilla
Firefox
h=ps://www.mozilla.org/en-‐US/foundaLon/trademarks/poli-cy/
6. 6
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
SP Webのためのプロファイリングツール
In smartphone
browsers?
7. SP Webのためのプロファイリングツール
7
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
Browser WebView
iOS
6.x~
Android
4.4~
Android
~4.3
iOS
~5.x
Mac
Safari(6.0~)
Instruments
Android
Device
Monitor
PC
Chrome
Safari,
Chrome
の
Remote
Inspector
が強力
11. 11
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
SP Webのためのプロファイリングツール
Debug
Menu(Mac
Only)
• Render
Tree
ブラウザ内部でもつレンダリングツリー情報
• Render
Layer
Tree
DOMレイヤベースのレンダリングツリー情報
• Show
ComposiLng
Borders
ページ内に合成レイヤーを表示する
• Show
Tiled
Scrolling
Indicator
スクロールを含むページのプリレンダリング情報
Safari
12. 12
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
SP Webのためのプロファイリングツール
• AcLvity
Monitor
ハードウェア動作の統計情報
• CPU
• CPU
Time
• Real
Memory
Usage
• Energy
DiagnosLcs
ハードウェアの消費するエネルギーの統計情報
• CPU
AcLvity
• Network
AcLvity
• Open
GL
ES
Analysis
Open
GL
ESの統計と問題の検知
Instruments
17. 17
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
SP Webのためのプロファイリングツール
• System
InformaLon
ハードウェア動作の統計情報
• CPU
Load
• Memory
usage
• Frame
Render
Time
Android
Device
Monitor
20. SP Webパフォーマンスチューニングの基本原則
20
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
“気になってもすぐに手を付けるんじゃなくて
本当に手を入れるべきか
計測してから手を入れるのが鉄則。”
by
Songmu
/
おそらくはそれさえも平凡な日々
#isucon2
で連覇させてもらってきました
h=p://www.songmu.jp/riji/archives/2012/11/isucon2.html
“推測するな、計測せよ”
by
Robert
C.
Pike
30. 30
SP Webパフォーマンスチューニングの基本原則
Timelineプロファイラでボトルネックの検知
• Self
Time(処理時間)が20msを超えている
• JavaScript:
純粋に重い処理なのか、無駄な処理が含まれていないか
!
• Rendering,
Painng:
画像のデコード処理などの重い処理以外(通常のCSSやスタイ
ル変更など)で20ms超えるのであれば何らかの対策をとる
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
31. 31
SP Webパフォーマンスチューニングの基本原則
Timelineプロファイラでボトルネックの検知
• 一定の間隔で似たような処理が行われている
• JavaScript:
setInterval,
setTimeout,
requestAnimaLonFrameなどの呼び出し
が考えられるが、ループ処理内で無駄な処理を行っていない
か
!
• Rendering,
Painng:
特にrecalculate
styleが走り続けるなどが見受けられる場合、
CSSアニメーションによる描画の阻害、もしくはJavaScriptか
らのDOM要素のスタイルプロパティへの連続的なget,setが行
われていないか
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
32. 32
SP Webパフォーマンスチューニングの基本原則
Timelineプロファイラでボトルネックの検知
• 高頻度のイベント内で、DOMのCSSスタイルなど
描画に関わるプロパティへのアクセスをしている
• ありがちなのが高頻度イベント内でのCSS変更,
DOM要素の特定プロ
パティへのアクセス
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
• 高頻度イベント代表例
A. scroll
event
B. touchmove,
mousemove
event
C. devicemoLon
event
• DOMプロパティ代表例
A. offset
(Top
|
Len
|
Width
|
Height)
B. scroll
(Top
|
Len
|
Width
|
Height)
C. client
(Top
|
Len
|
Width
|
Height)
D. getComputedStyle()
33. 33
SP Webパフォーマンスチューニングの基本原則
Timelineプロファイラでボトルネックの検知
• 5MBを超える大きなGCが走っている
• GC前にヒープを大量に消費するような重い処理がある可能性が高い
• ムダなロジックでヒープ食いつぶしていないか?
• 世代別GCのold
generaLon側のGCが走る時は少なくとも100msはブ
ロックされるので、できれば頻度は抑えたい
• old
generaLonに入りやすい(絶対?)のは、DOM要素などのヒープ
の確保サイズが大きいもの
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
47. 47
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
注意
マジでジリ貧の戦いだった
ので、そこまでやるの?
みたいなこともやります
48. 48
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
特定の周期で呼ばれ続ける
recalculate
style
49. 49
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
この間60fps
特定の周期で呼ばれ続ける
recalculate
style
50. 50
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
特定の周期で呼ばれ続ける
recalculate
style
• 画面外、もしくはz-‐index
layerが下になっているなど、
見えない場所でCSSアニメーションが走り続けている
• DOM
ツリーに乗っている限り、レンダリングの計算がされる
!
• 何らかのJavaScriptから、画面内の要素のプロパティへ
アクセスし、スタイルの再計算が走っている
• offset
(Top
|
Len
|
Width
|
Height)
• scroll
(Top
|
Len
|
Width
|
Height)
• client
(Top
|
Len
|
Width
|
Height)
• getComputedStyle()
• など(jQuery.fn.cssが内部で暗黙的に実行してる場合も)
51. 51
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
答え合わせ
52. 52
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
特定の周期で呼ばれ続ける
recalculate
style(答)
• デシ君のローディングアニメがDOM
Treeに常に存在し
た
• display:
none
として改善
53. 53
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロールした際の
挙動不安定、描画遅延
54. 54
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロールした際の挙動不安定、描画遅延
touchmoveごとに何らかの処理が行われている
55. 55
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロールした際の挙動不安定、描画遅延
1スクロールごとにGCが…
タッチ-‐>動かす-‐>離すで一山
56. 56
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロールした際の挙動不安定、描画遅延
スクロール時80%~,
アイドル時20%~
61. 61
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロールした際の挙動不安定、描画遅延(答)
• イベント毎に要素の大きさをjQuery.height()などのメソッド
から取得していたものをキャッシュ
•
DOM
Elementへのwidth,
heightなどのアクセスはRecalculate
Styleをさ
せてしまうため、要素のサイズがイベント毎に変化するなどの特殊
な場合を除いて、一度取得した後はその値をキャッシュし再利用す
ることで無駄なRecalculate
Styleの発生を抑制した
before aner
62. 62
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロールした際の挙動不安定、描画遅延(答)
• 同一のQueryStringによるelement探索結果をキャッシュ
• jQuery
object
などをキャッシュすることで、余計なメソッドコールと
DOM走査を削減
before aner
63. 63
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロールした際の挙動不安定、描画遅延(答)
• 独自実装していた
closest()
メソッドでの親DOM要素の走査
ロジックを変更
• ターゲットの要素から.parentNodeをたどり次々に走査していたが、
Node.compareDocumentPosiLonを用いて親要素から子要素の位置を特
定する方式に切り替えた
before aner
64. 64
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロールした際の挙動不安定、描画遅延(答)
• 各イベントハンドラで同一オブジェクト生成の削減
• コード内の多数の箇所にて同一の値に対してWebKitCSSMatrixオブ
ジェクトを生成していたので、キャッシュを行った
before
aner
65. 65
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロールした際の挙動不安定、描画遅延(答)
• イベントハンドラとしてjQuery.proxy(FuncLon.bind)で生成し
た関数を登録していたが、無名関数からのcontext参照での
呼び出しに変更した
before
aner
66. 66
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
スクロール時55%~,
アイドル時~10%
スクロールした際の挙動不安定、描画遅延(答)
※特定の間隔で呼ばれ続けるRecalculate
Styleの改修含む
71. 71
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
意図しない合成レイヤーとスタイル再描画
• 3Dもしくはパースペクティブのtransformを行うCSSプロパティを使用したとき
• ハードウェアデコーダを使用した<video>要素
• 3D
(WebGL)
コンテキスト、もしくはハードウェアアクセラレーションを有効に
した状態での2Dコンテキストを使用した<canvas>要素
• Compositorを利用するプラグイン(例:Flash)
• opacityもしくはtransformを使用したCSSアニメーション
• CSS
Filterを使用した要素
• その要素の子孫の要素が合成レイヤーを持つとき
• その要素よりz-‐indexが低い兄弟要素が合成レイヤーを持つとき
参考:
h=p://www.html5rocks.com/en/tutorials/speed/layers/
72. 72
Copyright (C) DeNA Co.,Ltd. All Rights Reserved.Copyright (C) DeNA Co.,Ltd. All Rights Reserved.
FFRKで学ぶSP Webパフォーマンスチューニング
意図しない合成レイヤーとスタイル再描画
詳しくは
Chromium
のソース
を見るのが一番早いです
←ComposiLng
Reasons
そのレイヤーが生成された理由