- ブラウザエンジンの最新トレンドを観測する
- 好奇心を満たす
直接の目的
- 効率的なWebコンテンツ開発などについて知見を深める
- 高速なコードの書き方について学ぶ
- 堅牢なWebアプリの設計について考える
直接の目的ではないこと
- 14:10 ~ 14:50 (40 min.) Servo Tetsuharu OHZEKI
- 15:00 ~ 15:45 (45 min.) アクセシビリティオブジェクトが作られない場合 @Takenspc
- 16:00 ~ 17:00 (60 min.) CSS JIT @Constellation
タイムテーブル
会の趣旨
ブラウザのプラットフォームを観測
⇒ブランチの話なので、リリースの一年程度先
事の始まり、FirefoxのGeckoエンジンの勉強会⇒スピンオフ的に始まった
・・・・なのに
「今日お話するネタはリリースされても一年先とか、のってもあまり使わないとかあまりためになりません」「なのになぜ60人も集まったのか主催者としては不思議です」 #browser_gazer
— publichtml (@publichtml) 2014, 7月 13
14:10 ~ 14:50 (40 min.) Servo Tetsuharu OHZEKI
発表資料になります http://t.co/sZKZHtxymB #browser_gazer /cc @azu_re
— さねさね (@saneyuki_s) 2014, 7月 15
【メモ】
1.モダンブラウザの処理フロー
http://dbaron.org/talks/2014-06-04-cssday/master.xhtmlより
DOMをPharseする
PhotoShopの合成フローみたいなことをやっている
DOMのTree(Rendering Tree)を構築している
2.現行エンジンの速度向上指針
①とりあえず最適化する
②非同期出来そうなところ頑張って非同期にする
③エンジン側で管理できるところを増やす
⇒メインスレッドでなるべく動かさないようにする
3.モダンブラウザの抱える問題
### モダンブラウザの抱える問題
- レイアウトフローがシングルスレッド動作なので速度向上に限界がある
- ハードウェアはマルチコア志向なのでアーキテクチャ的に使い切れない
#browser_gazer
— ライオン (@lion_man44) 2014, 7月 13
4.Servo
Servoの由来: アメリカ番組の謎キャラクター #browser_gazer
— anatoo (@anatoo) 2014, 7月 13
①Mozillaによる並列性にフォーカスしたブラウザエンジンの実装
Servo: 並列性にフォーカスした試験実装。Rustによって記述。 #browser_gazer
— anatoo (@anatoo) 2014, 7月 13
②Rustによって記述されている
⇒Rust Laungage:MOZILLA製の新言語,システムプログラミング,並列性・安全性,C++ meets haskell
③標準化されたSPEC通りに実装
④tableのlayout方法など、存在しないspec再検証
5.Servoのアーキテクチャ
①可能な限り非同期にする
メッセージパッシングで動いている
6.IFRAME(CROSS ORIGIN)
7.COPY-ON-WRITE DOM
DOMの変更点を接ぎ木していこうという思想
8.セレクタマッチングの並列化
CSSのセレクタのマッチング処理は非常にコストが高い
9.レイアウト処理の並列化⇒こいつが遅い
①シーケンシャルに処理している
②既存実装では並列化が困難
③エンジン側で管理できるところを増やす
⇒メインスレッドでなるべく動かさないようにする
iframeで親子フレームわけるのいい。Servoは可能な限り並列化。 #browser_gazer
— sys9kdr (@sys9kdr) 2014, 7月 13
10.レイアウト計算:3-PASS
bubble-width(botttom up)
assign-width(top down)
assign-height(bottom up)
レイアウト計算はbubble-width(bottom up), assign-width(top down), assign-height(bottom up)の3パス #browser_gazer
— anatoo (@anatoo) 2014, 7月 13
botttom up:子の結果に親が依存する
top down:親の結果に子が依存する
11.Foloatをどうするか?
①まわりこみが発生する
FLOATの影響受けてい場合は、フラグを立ている
影響を受けた要素はFLOATの計算終了後に再度実施する
- floatの影響を受けるものはフラグを立てる
- フラグが経ったものは遅延的に計算する
#browser_gazer
— azu (@azu_re) 2014, 7月 13
BLOCK FORMAT CONTEXT
検算をしていない⇒バグっている?!
12.その他試した事
①DOMのライフサイクル一本化
②Spider Monkey GCでRustオブジェクトの生存管理
③GPU上でのレイアウト計算
③pcwaltonが試したらしい。
#browser_gazer 大変そうなやつ "Blink in JavaScript - Google スライド" https://t.co/wAi2AzghbR
— azu (@azu_re) 2014, 7月 13
13.未トライ
①インクリメントレイアウト
②CSS JIT
③実用的なエンジンへの一歩
各プラットフォームへの移植
インターンの功績シリーズです #browser_gazer "Tim Disney (disnetdev) -- How to read macros" http://t.co/3EIX1duQpg
— azu (@azu_re) 2014, 7月 13
14.SERVOの将来⇒
Servoの将来:
NO PLAN
#browser_gazer
— ライオン (@lion_man44) 2014, 7月 13
⇒そもそも何も考えていない
15:00 ~ 15:45 (45 min.) アクセシビリティオブジェクトが作られない場合 @Takenspc
ブラウザエンジン先端観測会 http://t.co/68imr3K05W で使った資料をあげました http://t.co/XUw1hbI8aa #browser_gazer
— Takeshi Kurosawa (@Takenspc) 2014, 7月 14
【メモ】
1.アクセシビリティオブジェクトとは
①Access+Ability:アクセスできる
②誰にでもアクセスできる
③WEBへのアクセス
支援技術(Assivitive Technoogy)
⇒特定の機能を使いやすくしたり、
そのままでは使えない機能を行えるようにするデバイス,機能
2.ここのChronium Cast登場w
Operaを音声だけで操作する。
⇒Open/Close出来る。
Mozilla Japan オフィスで Google が開発した音声操作ソフトで Opera を起動 #browser_gazer
— ゆずえもん (@yuzuemon) 2014, 7月 13
アクセシビリティAPI
ブラウザと支援技術が連携する
MSAA:Windows
- 支援技術
- Assistive Technology
- 特定の機能を使いやすくする
- そのままで行えないものを出来るようするための製品、ツール、デバイス
#browser_gazer
— azu (@azu_re) 2014, 7月 13
3.アクセシビリティオブジェクト作られ方
アクセシビリティトリー構造
①役割:種類
②状態:動的な属性
③プロパティ:性的な属性
④その他:位置と大きさ、文字の大きさ等
セマンティクス情報,レイアウト情報、両方必要
Geckoの場合
非表示だったら、オブジェクトを作らない
テキストノードかどうかを見てオブジェクトを????
WebKit/Chronium,Blink
アクセシビリティオブジェクトの生成
WebCore/Blink が RenderTree をたどるのは、目に見えるもの(のその並びに従って)アクセシビリティツリーを作る目的に合致していると思う #browser_gazer
— ラーメン大好きKENZさん (@KENZ_gelsoft) 2014, 7月 13
一方で、 canvas 要素以下(の代替DOMツリーにたいしては) RenderTree の構造がないので DOM をたぐるという話なので、WebCore/Blink には DOM/RenderTree 両方向けの処理があるのだろう #browser_gazer
— ラーメン大好きKENZさん (@KENZ_gelsoft) 2014, 7月 13
WAI-ARIAのリスト関連⇒リストオブジェクト
WAI-ARIAのグリッド関連⇒グリッドオブジェクト
4.HTML5対応とは
アクセシビリティAPIで対応も一つ
実装状況⇒スライドを参照
5.調査ツール
aViewer:Windows
DOM Inspector:Firefox
#browser_gazer "aViewer 2013 | The Paciello Group Blog" http://t.co/pm7Lb7toPQ
— azu (@azu_re) 2014, 7月 13
6.フラット化
重要かどうかはブラウザ依存
7.WebKitのバグ
ブラウザのHTML5対応はアクセシビリティAPI側面を考える必要がある
16:00 ~ 17:00 (60 min.) CSS JIT @Constellation
http://t.co/XzAb3UB2HR Wrote a blog post about #WebKit CSS JIT.
— utatane (@Constellation) 2014, 7月 14
【メモ】
1.Motivation
- CSSセレクタはものすごい回数が実行される
- この要素にはこのスタイルを当てるというだけでも多い
- QuerySelectorでも大量に行われる
#browser_gazer
— azu (@azu_re) 2014, 7月 13
①Style Resolution/Query Selector
⇒rootにあるエレメントを全てチェック
合致するものがあれば、appendしていく
- QuerySelectorの実装
- rootから全ての要素を列挙する
- 一個一個セレクタにマッチするかどうかを確認(C++動くの凄い
- マッチしたものを返す
#browser_gazer
— azu (@azu_re) 2014, 7月 13
確か、ブラウザの高速化に関する論文(Servoでも引用されてる)で、計測した結果、処理時間の20%弱がCSS selector matchingに要されてるという研究結果があったはず #browser_gazer
— さねさね (@saneyuki_s) 2014, 7月 13
3.SelectorChecker::match(C++のソース)
div+ div~ div div> span
コンビネーター(+,~,>)⇒Selectorの評価の判断基準が変わる
Selectorの評価は右から左 Right to Left
- ~や+は関係性を示すもの(combinator)
- div 単純な子孫(simple)
- => 合わせてcompound selector
#browser_gazer
— azu (@azu_re) 2014, 7月 13
4.BackTrackingする場合にも関係する
- バックトラッキングを開始する時
- descendantに戻る必要がある
- descendantはレジスタのどこにあるのか分かってる
- そのため、レジスタは一個前(descendant)へ直接jumpすればいい
#browser_gazer
— azu (@azu_re) 2014, 7月 13
5.Candidates become less
6.CSS Selctor JIT
#browser_gazer C・S・S!J・I・T!
— hATrayflood (@hATrayflood) 2014, 7月 13
7.Compiling machine Code
うまく行くとCurrent Elementをレジスタにセットする
上記レジスタを用いて要素を評価をする
⇒BackTrackする時は、descendantのひとつ前の物を覚えておけばよいから
無駄なBackTrackを下げる⇒不要レジスタを減らすことができる
@Constellation 先生によるわかりやすい CSS JIT のアセンブラ解説すばらしい #browser_gazer
— ラーメン大好きKENZさん (@KENZ_gelsoft) 2014, 7月 13
「みんなこれを期待してたんですよね」 #browser_gazer pic.twitter.com/ftTrCYcSIu
— kyo ago (@kyo_ago) 2014, 7月 13
Q.CSS Selectorでダメなものは?
⇒A.70~80%程度
⇒A.疑似要素はダメ
⇒疑似クラスもダメ
- 全てのセレクタがCSS JIT対象?
- A. 擬似要素は対象外、擬似クラス、今後やっていく
#browser_gazer
— azu (@azu_re) 2014, 7月 13
selectorを評価する時に読み込み、コンパイルする
速度差の確認:WebKITのPerfomancedで確認できる。
まとめ
#browser_gazer "ブラウザエンジン先端観測会 #1 - Togetterまとめ" http://t.co/QZbg1FAgoS
— azu (@azu_re) 2014, 7月 14
#browser_gazer のメモ公開しました。 "ブラウザエンジン先端観測会 アウトラインメモ | Web Scratch" http://t.co/Da3E288wXt
— azu (@azu_re) 2014, 7月 13
おまけ
各種撮影会
javaさんとmonsterさんから出たjavaさんのツーショット
本当はsaneyuki_s師匠が撮影しているショットも有りましたが、
本人の許可を取っていないので差し控えますw
お約束のふぉくすけ