nwc perf
https://www.youtube.com/watch?v=nXvHsb3uCIw
@1000ch(司会)
@sisidovski
尾上洋介(likr)
パフォーマンスにどう取り組んできたか
宍戸
フロント・SPA開発
早いサイトをつくるにはどうすればいいか?
仕事
プライベート
JavaScript, CDN, キャッシュ戦略
likr
大学教員・研究
GPGPU
ハイパフォーマンス・コンピューティング
Webの中でリッチな計算をする
Web Assembly
WebGL
その際にローディングなどについても学んだ
1000ch
webkitのレンダリングに興味
そこからパフォーマンス、最適化の分野にはいった
ローディングについて
HTTP/2についてはリクエストのことを考えなくてもよくなった
CSS Spriteの心配はなくなった
HTTP1.0時代の小手先技術
リクエスト自体にコストはかかっている
モジュールの深さ(依存関係)でネックにはなる
5階層以上は重くなる
パフォーマンス・バジェット
Server Push
必要なファイルを細切れに送るのに興味あり
クライアントがキャッシュをもっているかを加味していない
これでパフォーマンスが出た例はあまり知らない
JSのバンドルについて
ツール周りが大きく変わってきたときに現場は変えられるのか
webpackがやってくれるならまぁ…
webpackを使いこなせるかがパフォーマンスを調整できることに繋がる時代になった
prefetch
先にリソースを先読み
開発者に委ねられている部分?
サイト速度のためにそれをやっていいのか?
ampが最たる例
クイックリンク
GitHub.icon https://github.com/GoogleChromeLabs/quicklink
リンク先をprefetchする
InterSection Observerを利用
圧縮
gzipや画像圧縮など
3Dモデルの圧縮はむずかしい(likr)
ポリゴンデータの構造を把握して量を減らす
Googleがその辺のライブラリ出していた?
GitHub.icon https://github.com/google/draco
CDNのレイヤーですべてやらせていた(宍戸)
そこですべて通せる・漏れがなくなるメリット
ただCDN - オリジン間の通信量もコストがかかる・トラフィック通信が増える
特にCSSのinlineとかのケース
オリジンも含めて通信させるようにしているのがいい
lazy load
1Pの中にどれだけコンテンツを含めるかを考えたほうがいい
CSSのインライン、画像の遅延ロードは活用すべき
ランタイム
off the main thread
リクエストアイドルコールバック
https://developer.mozilla.org/ja/docs/Web/API/Window/requestIdleCallback
スケジューリングをブラウザでレンダリングする
Custom Elements
Web Components
SEO評価としてアリ
Slotの中に評価されることを書いておける
遅れてスタイリングするのはいいと思う(likr)
見た目のチラつきはいいが、スタイルがガクつくのはまずい(1000ch)
3G配信にむけてのフォローは?
高性能開発機問題
4-5年前のWindows機を買ってパフォーマンスチェックしたほうがいい
lighthouseでやってみてはいるが…
本当の日本のリアルユーザーにはどう改善できた?
後進国らへんがプライオリティをおいている
日本はどこまで関与すべき?
ギガを消費したときに規制をもらうときは恩恵がある
パフォーマンスのモニタリング
lighthouse
RUM
Real time User Monitering
SpeedCurve
高いらしい
Speed Indexをよく見ていた(宍戸)
First Contentful Paint, Time to Interactive はよく見ていかないとという気持ち
ふわっとしたアドバイスは参考程度
パフォーマンス・チューニング
職人技になってないか?
知らない人を含めて誰でも参加できる環境が求められていないか?(likr)
改善の参加はメトリクスをしること(1000ch)
クリティカル・レンダリングパスをいかに減らすか
DOMが重いのをどう解決するか?
amp
GatsbyJSが最近有名?
Web Packaging
Signed HTTP Exchanges
https://developers.google.com/web/updates/2018/11/signed-exchanges
ampのURLじゃなくてもよくなる
SIMD
https://developer.mozilla.org/ja/docs/Glossary/SIMD
wasmとjsが100倍速度が違うとした場合に、できることは変わる
インタラクティブにできることが増える
Web = ネイティブアプリの一種類
Webのパフォーマンス改善には
ウェブが便利になるというのと
今までウェブでできなかったことが可能になる
という2つの文脈がある
マルチスレッドは複雑
WebWorker
UI threadを邪魔しない
DOMの操作と純粋な計算とがうまく分けられてない
WorkerDOM
https://github.com/ampproject/worker-dom
Angularのv2でworkerで何を動かすか、という実験があった
Vue.jsでのWebWoker
https://github.com/israelss/vue-worker
WorkerからDOMのAPI Proposal
https://github.com/drufball/worker-node
この仕様・APIがアツい
WebAssembly(likr)
WebWorkerと合わせて使ってる
Feature-Policy(宍戸)
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Feature-Policy
3rd Partyのものにdocument.writeをさせない
Performance Observer(1000ch)
Speedindexとかをとっていた時に50msとかかかってしまう問題をもっと早く取れるようにしたい
HTTP/3について
CDNが実装してほしい
今もHTTP/2のサーバを自分で運用してるケースがすくなってきている
HTTP/3でもそういう傾向になるのでは
画像圧縮
webp
https://github.com/GoogleChromeLabs/squoosh/
JPEG XS
https://japanese.engadget.com/2018/04/16/jpeg-xs-vr/
重いGifはどうするか
ロードシーケンスのタイミングは必ず事前に確認しておくようにしている
ヒーローイメージが重いと台無し