今年もいってきたので。
JRが安定の電車遅延で基調講演はすべりこみだったのでメモなし。
大規模運用で見えるWebプロトコルの理想と現実、そして今後
Yahoo!のproxy
AOSSL
deploy
- chef enterprise x screwdriver
HTTP/2の現実
- HTTP/1.1の欠点
- 1Req 1TCP接続
- ブラウザは6本くらいしか同時接続できないので後は詰まる
- HTTP/2は速い?
- 大きめのファイル(1.5MBの動画)は確かに速くなってる
- ただHTTP/2対応ブラウザ = 速いブラウザなのでそのせいの影響も・・?
- 小さいファイル(11KBの画像)はほとんど変わらん
- サーバー側からみると、よくわからん
- クライアントからはどうか
- DOMCLまでの時間はほぼ変わってない
- プロトコルだけ変えてもそんなに効果はないと思われる
- 新規接続 vs 再接続の割合
- HTTP/2: 1:9
- HTTP/1.1: 4:6
- サーバー負荷は下がってる
- 結局どうだったの
- 導入で大したトラブルはなかった
- 効果があったかはこれからやっていくところ
TLSの現実
React v16 and beyond React Fiber
React v16
- 1年ぶりのメジャーアップデート
- v15.6からはスムーズにアップデートできるはず
- ライセンスがMITに
- 文字列や配列がコンポーネントとして返せるように
- 配列は引き続き`key`をつける必要あり
- JSXでサポートされるかも・・?
- `componentDidCatch()`で子のエラーを拾えるように
- エラーが起きると`ReactDOM.render()`したルートからunmountされる(拾ってなかったら
- `ReactDOM.createPortal()`
- モーダルとかの表示用に、別の場所に`ReactDOM.render()`しなくてよくなる
- RollupでFlatにビルドされるように
- ファイルサイズが削減
- 内部モジュールは直接参照できなくなる
- SSR
- 独立したRendererに
- StreamRendering
- `ReactDOM.render(SSRされたやつ)`の代わりに、`ReactDOM.hydrate()`
- ReactElementの単位でチェックされるように(v15までは全部使う or 全部捨てるだった
- ホワイトリストにない属性もDOMに反映されるように
- Map / Set / rAFが必須に
Fiberとは
- コアアルゴリズム(の再実装
- 既存の再帰 x 同期レンダリングは重い・遅い
- コンポーネントのアップデートサイクルをスケジューリングできるように
- UIのレスポンス性を改善するもの
- Scheduling
- `requestIdleCallback`での時間ベース
- Sync, Task, High, Low, OffScreenといった優先度ベース
- Fiber = Componentの単位
- LinkedList
- ルートからレンダリングしている途中でも、どこからでも中断・再開できる
- Begin -> Complete -> Commitのフェーズ
- `componentDidMount()`はBegin, `componentDidUpdate()`はCommitのように
- Beginは非同期にレンダリングされる場合、複数回起こりうる
- ただこれらの非同期レンダリングは、v16のデフォルトでは有効ではない
- 試すことはできる
- CustomRenderer
- Consoleに吐くコンポーネントとか、`say()`で動くVoiceRendererとか作れる
- preactとかinfernoみたいに自作しなくても差し替えられる!
- WASMで書き換えられる未来もあるかも
v17待ちかなー。
The State of Web Components
資料は見つけたら
Web Components
- HTML + CSSで作るつらさ
- スコープがない
- 再利用しにくい(+ JS)
- 仕組みがないので意識するしかない
- Shadow DOM / Templates / HTML Imports / Custom Elements
- HTML Imports は ES Modulesへ
- 1. Shadow DOM
- Shadow DOM
- スコープを区切るもの
- `shadowRoot`を生成し、その中に影響範囲を留める
- `el.attachShadow({ mode: 'open' })`
- 2. Custom Elements
- Custom Elements
- 独自のHTML要素をつくる
- `connectedCallback()`などライフサイクルメソッドが使える
- Shadow DOMとCustom Elementsを組み合わせることで、scopedなコンポーネントに
- 3. Templates
- いままで`display: hidden`で用意したり、`script type:text`内に書いたりしてたアレ
- HTML Standard
- 4. ES Modules
- HTML Importsがお亡くなりになった
- HTML Modulesなる動きもあるが果たして・・
- ES6 Modules in Depth
関連Topics
- Web Components sandbox
- ブラウザーサポート
- YouTubeがWeb Componentsを採用した
- が、Shadow DOMは使ってない様子
- Polymer -> webComponents.js
- アクセシビリティ
- 通常のHTMLを書くときと一緒
- WAI-AREAとか`inert`属性とか
- パフォーマンス
- コンポーネントは`script`でロードするのでHTTP/2とか
- `type=module`は`defer`されちゃうので、最適化は必要かも?
- レンダリング
- LightDOMとShadowDOMの差
- 大差はないと思うが、ブラウザに委ねられる
- Reactなどからも通常の要素と同じように使える
- VirtualDOMのように差分描画は自分で
- GitHub - PolymerLabs/lit-html: HTML template literals in JavaScript
さすがのわかりやすさやった・・・!
おわりというかぼやき
こういうカンファレンスの撮影NGとSNS禁止って、何を意味してるの・・?
- 内容をインターネットに放流しないでってこと?
- 顔出しNGってこと?
- 撮影音うるさい・まぶしいからやめてってこと?
- スライド内に著作物があるからだめよ(メモはいいよ)ってこと?
はっきりせんし、いろいろ類推するのも面倒やし、なにもしないのが一番ええやろってことで、今回は、そういうの聞くと一切メモを残さないスタンスでいきました。