44
ブラウザレンダリング 最適化テクニック taiga.jp Taiga Hirohata

ブラウザレンダリング 最適化テクニック

  • View
    2.621

  • Download
    3

Embed Size (px)

DESCRIPTION

taiga.jp

Citation preview

Page 1: ブラウザレンダリング 最適化テクニック

ブラウザレンダリング 最適化テクニック

taiga.jp Taiga Hirohata

Page 2: ブラウザレンダリング 最適化テクニック

About

Freelance engineer (Flash, Flex, AIR, JavaScript etc)

Principle Classmethod, Inc.

Adobe Community Professional

http://taiga.jp/

@taiga

2 / 44 © 2013 taiga.jp

Page 4: ブラウザレンダリング 最適化テクニック

URLに移動すると Web ページが ローダーによって「タグスープ」として呼び出される

タグスープはパースする必要がある

ページ読み込み (遷移)

Network Local Tag soup HTML

Parser

4 / 44 © 2013 taiga.jp

Page 5: ブラウザレンダリング 最適化テクニック

DOM ツリーを構築することが目的

HTML パース

5 / 44 © 2013 taiga.jp

Page 6: ブラウザレンダリング 最適化テクニック

正しい HTML を解釈した場合の例

HTML パース

<html>

<head>

<title>Yo!</title>

</head>

<body>

<div><img src="max.png"></div>

<div><p>ADC MEETUP 07</p></div>

</body>

</html>

6 / 44 © 2013 taiga.jp

Page 7: ブラウザレンダリング 最適化テクニック

正しい HTML を解釈した場合の例

HTML パース

HTMLHtmlElement

HTMLHeadElement HTMLBodyElement

HTMLTitleElement HTMLDivElement HTMLDivElement

HTMLPragraphElement HTMLImageElement

TextNode

7 / 44 © 2013 taiga.jp

Page 8: ブラウザレンダリング 最適化テクニック

不完全な HTML でもパーサはいくつかの推測を行い補う

HTML パース (推測)

<html>

<head>

<title>Yo!</title>

</head>

<body>

<div><img src="max.png"></div>

<div><p>ADC MEETUP 07

</body>

</html> 8 / 44 © 2013 taiga.jp

Page 9: ブラウザレンダリング 最適化テクニック

正解

HTML パース (推測)

HTMLHtmlElement

HTMLHeadElement HTMLBodyElement

HTMLTitleElement HTMLDivElement HTMLDivElement

HTMLPragraphElement HTMLImageElement

TextNode

9 / 44 © 2013 taiga.jp

Page 10: ブラウザレンダリング 最適化テクニック

不完全な HTML で推測失敗した場合

HTML パース (誤推測)

<html>

<head>

<title>Yo!</title>

</head>

<body>

<div><img src="max.png">

<div><p>ADC MEETUP 07

</body>

</html>

10 / 44 © 2013 taiga.jp

Page 11: ブラウザレンダリング 最適化テクニック

何か違う

HTML パース (誤推測)

HTMLHtmlElement

HTMLHeadElement HTMLBodyElement

HTMLTitleElement HTMLImageElement HTMLDivElement

HTMLPragraphElement

TextNode

11 / 44 © 2013 taiga.jp

Page 12: ブラウザレンダリング 最適化テクニック

最近のブラウザ

パーサーがブロックまたは待機しそうな場合 それを予測してその他の外部リソースを先読みする

ウォーターフォール

12 / 44 © 2013 taiga.jp

Page 13: ブラウザレンダリング 最適化テクニック

ウォーターフォール

invalid

valid

13 / 44 © 2013 taiga.jp

Page 14: ブラウザレンダリング 最適化テクニック

demo

14 / 44 © 2013 taiga.jp

Page 15: ブラウザレンダリング 最適化テクニック

default style sheet

inline styles

inline CSS

CSS Loaded from external files

CSS

15 / 44 © 2013 taiga.jp

Page 16: ブラウザレンダリング 最適化テクニック

CSS

p, div {

margin-top: 3px;

}

.error {

color: red;

}

CSSStyleSheet

CSSRule

p

Selectors Declaration

div margin-top 3px

CSSRule

Selectors Declaration

.error color red

16 / 44 © 2013 taiga.jp

Page 17: ブラウザレンダリング 最適化テクニック

DOM ツリーとスタイル情報を元に レンダーツリーが構築される

レンダーツリーは視覚的な情報を保持する

DOM + CSS によるツリー

HTML Parser to

DOM Tree Render Tree

Paint!

CSS Parser to

Style Rules

17 / 44 © 2013 taiga.jp

Page 18: ブラウザレンダリング 最適化テクニック

適切なスタイルは DOM ツリー内の 各エレメントに対して計算される必要がある

スタイルは様々なマップに格納される (後で簡単に取得できるようにするため)

マッピングは検索の範囲を減らし 結果的に負荷軽減へと繋がる

CSS スタイル マッチング

18 / 44 © 2013 taiga.jp

Page 19: ブラウザレンダリング 最適化テクニック

CSS スタイル マッチング

div {

font-size: 11px;

}

table div {

font-size: 12pt;

}

#theId {

display: none;

}

.myClass {

color: #ff0000;

}

<html>

<body>

<div><img src="max.png"></div>

<div><p>ADC MEETUP 07</p></div>

<p id="theId"></p>

<p class="myClass"></p>

</body>

</html>

Tag

ID

Class

19 / 44 © 2013 taiga.jp

Page 20: ブラウザレンダリング 最適化テクニック

セレクタの詳細性 (specificity) は重要

…だが混乱しやすいのでできるだけ具体的に

純粋なパフォーマンス観点より

ID セレクタに続いてクラスセレクタは高速

子孫セレクタ、子セレクタは 可能な限り避けるべき

CSS クイックアドバイス

20 / 44 © 2013 taiga.jp

Page 21: ブラウザレンダリング 最適化テクニック

セレクタの詳細度計算 “Selectors Level 3” W3C Recommendation 29 Sep 2011

セレクタ内の… ( style 属性は詳細度最強 )

• ID セレクタの個数を数える (=A)

• クラスセレクタ、属性クラスタ、 疑似クラスセレクタの個数を数える (=B)

• 型セレクタと疑似要素の個数を数える (=C)

• 全称セレクタは無視される

CSS クイックアドバイス

21 / 44 © 2013 taiga.jp

Page 22: ブラウザレンダリング 最適化テクニック

セレクタの詳細度計算

CSS クイックアドバイス

* /* A=0 B=0 C=0 -> 詳細度 = 0 */ li /* A=0 B=0 C=1 -> 詳細度 = 1 */ ul li /* A=0 B=0 C=2 -> 詳細度 = 2 */ ul ol+li /* A=0 B=0 C=3 -> 詳細度 = 3 */ h1 + *[rel=up] /* A=0 B=1 C=1 -> 詳細度 = 11 */ ul ol li.red /* A=0 B=1 C=3 -> 詳細度 = 13 */ li.red.level /* A=0 B=2 C=1 -> 詳細度 = 21 */ #x34y /* A=1 B=0 C=0 -> 詳細度 = 100 */ #s12:not(foo) /* A=1 B=0 C=1 -> 詳細度 = 101 */

22 / 44 © 2013 taiga.jp

Page 23: ブラウザレンダリング 最適化テクニック

レンダーツリーはディスプレイの 視覚的様相に関係している

レンダーツリーの理解

23 / 44 © 2013 taiga.jp

Page 24: ブラウザレンダリング 最適化テクニック

レンダーツリーの理解 div {

font-size: 11pt;

}

img {

display: none;

} html

head body

title div p

span

TextNode

img

Root

RenderBlock

RenderBlock RenderBlock

Renderline

RenderText font-size:11pt

display:none

font-size:11pt

24 / 44 © 2013 taiga.jp

Page 25: ブラウザレンダリング 最適化テクニック

元凶はシンプル

Web 環境で最も遅い操作は DOM 操作

何をすべきかに応じてブラウザは 無効なものをマークする必要がある

ひとつにまとめる

25 / 44 © 2013 taiga.jp

Page 26: ブラウザレンダリング 最適化テクニック

プロセスを再度有効にするということは 下記図の一部を実行することを意味する

ひとつにまとめる

DOM

HTML

Attachment Render Tree

HTML Parser

CSS Parser

DOM Tree

Style Rules

Layout

Painting Display

Style Sheets

26 / 44 © 2013 taiga.jp

Page 27: ブラウザレンダリング 最適化テクニック

• 変更する

表示/非表示

• 変更しない

再レイアウトおよび再測定

• 変更しない

Repaint only

27 / 44 © 2013 taiga.jp

Page 28: ブラウザレンダリング 最適化テクニック

Repaint only DOM

HTML

Attachment Render Tree

HTML Parser

CSS Parser

DOM Tree

Style Rules

Layout

Painting Display

Style Sheets

28 / 44 © 2013 taiga.jp

Page 29: ブラウザレンダリング 最適化テクニック

サイズ

• 変更する

位置

• 変更する

再レイアウトおよび再測定

• 変更する

Re-layout / flow

29 / 44 © 2013 taiga.jp

Page 30: ブラウザレンダリング 最適化テクニック

Re-layout / flow DOM

HTML

Attachment Render Tree

HTML Parser

CSS Parser

DOM Tree

Style Rules

Layout

Painting Display

Style Sheets

30 / 44 © 2013 taiga.jp

Page 31: ブラウザレンダリング 最適化テクニック

Layout(reflow) Visualization

http://youtu.be/ZTnIxIA5KGw

31 / 44 © 2013 taiga.jp

Page 32: ブラウザレンダリング 最適化テクニック

これだけは覚えて帰ろう

HTML Parser to

DOM Tree Render Tree

(Reflow) Paint!

CSS Parser to

Style Rules

32 / 44 © 2013 taiga.jp

Page 33: ブラウザレンダリング 最適化テクニック

DOM 相互作用をより速くするため その相互作用の量を減らすべき

常にフローチャートの最小量の実行を目指す

ブラウザがチャートの一部を複数回 実行させる場合を考慮する

ツリーへの影響に注意を払う

動作はより少なく

33 / 44 © 2013 taiga.jp

Page 34: ブラウザレンダリング 最適化テクニック

パフォーマンスに欠かせないのはツール

ツール

34 / 44 © 2013 taiga.jp

Page 35: ブラウザレンダリング 最適化テクニック

YSlow

Chrome Plugin

Firefox

ツール

35 / 44 © 2013 taiga.jp

Page 36: ブラウザレンダリング 最適化テクニック

Speed Tracer

Chrome Plugin

ツール

36 / 44 © 2013 taiga.jp

Page 37: ブラウザレンダリング 最適化テクニック

FireBug

Firefox

ツール

37 / 44 © 2013 taiga.jp

Page 38: ブラウザレンダリング 最適化テクニック

dyna Trace(5 day trial)

IE Extension

Firefox

ツール

38 / 44 © 2013 taiga.jp

Page 39: ブラウザレンダリング 最適化テクニック

jsPerf http://jsperf.com/

ツール

39 / 44 © 2013 taiga.jp

Page 40: ブラウザレンダリング 最適化テクニック

Webpagetst.org http://www.webpagetest.org/

ツール

40 / 44 © 2013 taiga.jp

Page 41: ブラウザレンダリング 最適化テクニック

強力なツール群

Tools

• Network View

• Timeline

• CSS Profiler

Chrome Developer Tools

41 / 44 © 2013 taiga.jp

Page 42: ブラウザレンダリング 最適化テクニック

強力なツール群

Render Information

• Paint Rectangles

• Composited Layer Borders

• FPS Meter

• Continuous Page Repainting

Chrome Developer Tools

42 / 44 © 2013 taiga.jp

Page 43: ブラウザレンダリング 最適化テクニック

HTML5 ROCKS

How Browsers Work: Behind the scenes of modern web browsers http://www.html5rocks.com/en/tutorials/internals/howbrowserswork

さらに詳しく

43 / 44 © 2013 taiga.jp