Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
ssuser3c214d
82 views
Web frontend performance tuning
Web フロントエンドのパフォーマンスチューニングについてLTしたのでその資料です
Technology
◦
Related topics:
Web Development
•
Read more
0
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 29
2
/ 29
3
/ 29
4
/ 29
5
/ 29
6
/ 29
7
/ 29
8
/ 29
9
/ 29
10
/ 29
11
/ 29
12
/ 29
13
/ 29
14
/ 29
15
/ 29
16
/ 29
17
/ 29
18
/ 29
19
/ 29
20
/ 29
21
/ 29
22
/ 29
23
/ 29
24
/ 29
25
/ 29
26
/ 29
27
/ 29
28
/ 29
29
/ 29
More Related Content
ODP
HTML5 アプリ開発
by
tomo_masakura
ODP
今流行りのウェブアプリ開発環境Yeoman
by
tomo_masakura
PDF
SaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみる
by
Masashi Murakami
ODP
HTML5 開発環境の紹介
by
tomo_masakura
PDF
GUIツールで送る快適な Gitライフ@Creators MeetUp #29
by
Erina Takei
PDF
いまさら聞けない!?Backbone.js 超入門
by
Kohei Kadowaki
PDF
BACKBONE.JSによるWebアプリケーション開発について
by
Toshio Ehara
PDF
ピピピのPWA
by
Matsuo Obu
HTML5 アプリ開発
by
tomo_masakura
今流行りのウェブアプリ開発環境Yeoman
by
tomo_masakura
SaCSS vol.63 動的なサイトの開発でgulpとBrowserSyncを使ってみる
by
Masashi Murakami
HTML5 開発環境の紹介
by
tomo_masakura
GUIツールで送る快適な Gitライフ@Creators MeetUp #29
by
Erina Takei
いまさら聞けない!?Backbone.js 超入門
by
Kohei Kadowaki
BACKBONE.JSによるWebアプリケーション開発について
by
Toshio Ehara
ピピピのPWA
by
Matsuo Obu
What's hot
PDF
120225 bootstrap
by
TechGardenSchool
PPTX
Bootstrap
by
Masaki Kusuhata
PPT
GruntでJavaScript 前作業の自動化!
by
leverages_event
PDF
とある Perl Monger の働き方
by
Yusuke Wada
PDF
ブラウザだけで学ぶWebアプリ開発
by
schoowebcampus
PPT
BuddyPressで街のポータルサイトを作ろう
by
松田 千尋
PDF
Yeoman RIAビルドツール超入門
by
Masakazu Muraoka
PDF
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
by
Jun-ichi Sakamoto
ODP
Pinoco phptal-phpcon-kansai
by
Hisateru Tanaka
PPTX
[社内勉強会]Gradleを使おう
by
hirooooo
PPTX
Kerasで可視化いろいろ
by
Masakazu Muraoka
PPTX
Touhou Project on JavaScript
by
sairoutine
PDF
「新しい」を生み出すためのWebアプリ開発とその周辺
by
Yusuke Wada
PPTX
JS と Canvas で作るシューティングゲーム
by
sairoutine
PDF
chat bot framework for Java8
by
masahitojp
PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
by
Jun-ichi Sakamoto
KEY
WordPressプラグイン Jetpack って何だ?!
by
Yuji Nojima
PDF
CSS Nite LP26 CodeKitで始める次世代Web制作
by
Maboroshi.inc
PDF
CLR/H第54回勉強会 ライトニングトーク
by
Jun-ichi Sakamoto
PDF
ディレクタ兼エンジニアの仕事@Creators MeetUp #36
by
Erina Takei
120225 bootstrap
by
TechGardenSchool
Bootstrap
by
Masaki Kusuhata
GruntでJavaScript 前作業の自動化!
by
leverages_event
とある Perl Monger の働き方
by
Yusuke Wada
ブラウザだけで学ぶWebアプリ開発
by
schoowebcampus
BuddyPressで街のポータルサイトを作ろう
by
松田 千尋
Yeoman RIAビルドツール超入門
by
Masakazu Muraoka
C# で Single Page Web アプリが開発できるフレームワーク&開発環境 「Blazor」 ― その概要と Web アプリ開発者にもたらす利点
by
Jun-ichi Sakamoto
Pinoco phptal-phpcon-kansai
by
Hisateru Tanaka
[社内勉強会]Gradleを使おう
by
hirooooo
Kerasで可視化いろいろ
by
Masakazu Muraoka
Touhou Project on JavaScript
by
sairoutine
「新しい」を生み出すためのWebアプリ開発とその周辺
by
Yusuke Wada
JS と Canvas で作るシューティングゲーム
by
sairoutine
chat bot framework for Java8
by
masahitojp
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
by
Jun-ichi Sakamoto
WordPressプラグイン Jetpack って何だ?!
by
Yuji Nojima
CSS Nite LP26 CodeKitで始める次世代Web制作
by
Maboroshi.inc
CLR/H第54回勉強会 ライトニングトーク
by
Jun-ichi Sakamoto
ディレクタ兼エンジニアの仕事@Creators MeetUp #36
by
Erina Takei
Web frontend performance tuning
1.
Web Frontend Performance Tuning Shinobu
Hayashi(@Shinyaigeek) @サマーインターン前にツヨツヨになっちゃおうの会
2.
About me Shinobu Hayashi(林 仁) -
Twitter & GitHub: @Shinyaigeek - Blog: https://shinyaigeek.dev しにゃいの学習帳 🗒 - 東大工学部三年 - Web Developer 🕸 - 就活中🦄
3.
Agenda Web Frontend Performance
tuning - 計測 - 実践 - やらかし - チューニング - 技術選定 - 何故パフォーマンスに気を配るか 🙅♂ サーバーサイドのチューニング 🙅♂ モバイルのチューニング
4.
計測
5.
計測 Core Web Vitals
: Web で優れたUXを提供するために共通する重要な指標 - Largest Contentful Paint: viewportにおいて, 最も大きな画像, テキスト(= 主要なコンテンツ)のレンダリングに要する時間 - First Input Delay: ユーザーの入力に対してどれくらい早く反応できるか - Cumulative Layout Shift: コンテンツを表示して, どれくらいがくってなるか check: https://www.youtube.com/playlist?list=PLNYkxOF6rcIDC0-BiwSL52yQ0n9rNozaF
6.
計測 ツール達 - Web Vitals
(Chrome 拡張): Web Vitalsを測ってくれる - LightHouse: Perfやアクセシビリティを測れる. 開発環境でも使いやすい - LightHouse CI: CI上でLightHouseを実行できる. metaタグの有無のチェックとかも やってくれる - CrUX: フィールドデータを取ってこれる etc… 基本的にはフィールドデータ, ラボデータ見つつ, ローカル環境でチューニングして LightHouse CIでregressionを防止する感じで進めていく ※LightHouse等のスコアを過信しすぎるのも良くないかなと思います. ただチューニングの足がかりとして強い.
7.
実践 🤔「よっしゃ, 計測方法はわかった. スコアの意味もわかった.
でも具 体的にどう改善していけばええんや??」 -> ということで, このLTで実際にやっていきましょう このアプリを早くします : https://22-si-demo.vercel.app/ 見てもらえればわかるのですが , 中身はごく普通のブログです 構成はReact, WebpackでのSPAです 施策については, LTではその意味について触れるだけにするので , 実装と かはGitHubのPRみてください
8.
Runtime Cost, I/O
Cost その前に... - 💻 Runtime Cost: ユーザー操作, setInterval等を受けての処理のコスト, あるいは レンダリングのコスト cf: Runtime 🤔: Node.js, deno, browser(chrome, safari…), electron… v8, spider monkeyはengine Runtime Costが高いとなんかカクカク, もっさりしたアプリケーションになる - ⚡ I/O Cost: Input/Output処理のコスト. この場合サーバー とのReq/Resのやり取りのコスト I/O Costが高いと, なかなか遷移しなかったり, ユーザー操 作を受け取れるようになるまで(TTI)時間がかかったりする アプリケーションになる
9.
個人的にはパフォチューではRuntime CostとI/O Costの二つを改善していく ことを念頭に置けばやりやすいと思います -
Runtime Cost 💻 DOMが大きくなりすぎないように 💻 (React, Vueなど仮想DOMを扱うライブラリを用いている時 ) 不要なre-renderは減らす 💻 非同期処理はちゃんと扱う (あとjsのファイルサイズを減らせば parse, compile, execの内parse, compileというlong taskに かかる時間が減るため Runtime Costが減るという見方もあったりします ) - I/O Cost ⚡ file sizeを減らす ⚡ 配信するコンテンツの優先順位をつける (preload, lazy load) ⚡ fileを圧縮する(gzip, Brotli) ⚡ Cache !! Cache!! Cache!!
10.
実践
11.
実践 🐵 < よし!
https://22-si-demo.vercel.app/ を計測だ!(Lighthouse ポチ
12.
実践 🐵 < とりあえず
I/O 見るぞ. chromeのdevtoolの Network tabポチ!!! 🐵 < main.jsが10MB..デカすぎんだろ... よし!とりあえずJSのbuild sizeを減らすぞ!
13.
実践(チューニング以前のやらかしを潰す) 🙈 そもそもproduction buildしてなかった
(これをしていないとminifyされなかったり, 様々な最適化がなされなかったりする) 🙈 画像ファイルがbase64エンコードされてjsファイルに入ってる(webpackだと url-loaderとかでやりがち) 🙈 route-basedなcode splittingすらしてなかった(これをしてないと例えば /profile にア クセスした時レンダリングには不要な / のコンテンツまでロードしないとレンダリングされ ない) これらはチューニング以前のやらかし🙈 ※ ちなみにここで書いたやらかしは実際に僕がやってしまったものです 🙈
14.
実践 🐵 < 94点まで伸びた!!!! やらかしを失くすだけでちゃんとする場合も結構ある 今回のような,
ブログという小規模なアプリを意図的に重くしたようなケース は少ないと思うので, ここまで劇的に伸びるわけではないですが
15.
実践 🐵 < よっしゃ!いよいよチューニングや! 🐵 そもそも全てのブラウザに対してES5にtranspileしたコードを配信しなくて良くな い??(differential
serving) 🐵 リソースの一部って読み込みの優先順位上げ下げして良くない? - <link rel=”preload” /> - img preload attr
16.
補足(differential serving) jsのコードはレガシーな環境でも動くようにbabel等でtranspileされる transpileでコード量は増えるわけ だけど, 全てのブラウザで transpileしなきゃなの🤔 ->
そうでもない, これを聞いている ような人はchromeのconsoleで class文など普通に実行できると思 います
17.
補足(differential serving) 90%以上のブラウザがES6で書かれたコードを実行可能 (https://caniuse.com/#feat=es6-module) -> モダンな環境にはモダンなJSを,
レガシーな環境にはレガシーなJSを配信したい どうやんの ?🤔 - module-nomodule pattern - Feature Detection - User-Agent Sniffing in detail: https://philipwalton.com/articles/deploying-es2015-code-in-production-today/, https://nodaguti.hatenablog.com/entry/2020/04/18/184251
18.
補足(Skeleton) Skeleton 💀? ->
リソースがまだloadされてない間表示しておくもの 身近なSkeleton 💀 Youtube GitHub
19.
実践 🐵 < よし!改善できた気がするから計測や!Lighthouse
ビターン!!! ��🐵 < 表示は早なったけどまだもっさりしてる気もする
20.
実践 何故か空の<span />でいっぱい!! 👉 (こういったのははわざと生み出した通常有り得ない例ですが) DOMはデカくなりすぎないように気を配りましょう -
表示するコンテンツが有限でいいとき : Pagination - 表示するコンテンツがユーザーインプットを受けて無限である時 (無 限スクロール): virtualized(library: react-virtualized https://github.com/bvaughn/react-virtualized)
21.
実践 (Reactで) 不要なre-renderingを避ける chrome extensionsの
“React Developer Tools”を 入れる -> devtoolを開く -> Profilerを開く -> ⚙をク リックして✅Highlihgt update when component renderにチェックをつけると componentがmount, re-renderされたタイミングでハイライトすることが出 来る 無駄なre-renderingを避けるためには - React memo - key props - stateを正しく運用する
22.
他にもチューニングはいっぱい。。! - inline require -
cache - img(webp, resize) - prefetch - idle - file comporession - HTML Streaming etc...
23.
そもそもの話🤔 このアプリはSSRもSSGもClientSideでfetchとかもしてなくて, jsのなかに記事 が全部埋め込まれている形式 -> ブログならSSR,
SSGすれば良いのでは?? -> そもそもクライアントサイドにReactを持ち込む必要はあった??(JSXが欲しいだけな ら, react-dom/serverでhtml生成するだけでもよい, あるいはPreactとかでやればjsの size小さくなるのでは??) -> あるいはSvelte, lit-html, solid等の選択肢もある 後で直したり移行したりはしんどかったりする -> 🙅♂安易に決めちゃダメ
24.
技術選定について
25.
正直技術選定めんどくさいんじゃが。。 👺 < そもそもフロントエンドは専門じゃないしできればこの辺お手軽にやりたい んじゃが。。 個人的にはブログとかポートフォリオサイトならNext.js,
Nuxt.jsはシステム に乗っかりやすいFWで, なおかつきちんと乗っかって利用していれば大げ さにやらかすことも少ないのでオススメです 記事の管理は外部のCMSに任せるJamStack Architectureはオススメで す. Next.jsとかだったらボイラープレートとなるexampleを指定できて, それ で結構簡単に作れます
26.
何故パフォーマンスに気を配るの
27.
なぜパフォーマンスに気を配るの🤪 🍜👨🦲「いいものを作れば売れるというナイーブな考えは捨てろ」 -> (面白い |
役に立つ) (もの | サービス) だからと言って売れるとは限らない いいものをユーザーに届けるために - 広告 - 有無を言わせぬデザイン - アクセシビリティへの配慮 - パフォーマンス 等々のアプローチも求められる 動くことは前提としてそれを届けるために「動いたらいいや」 のその先に行こう!!!!
28.
興味がある人は👀 とりあえず「超速!Webページ速 度改善ガイド」, 通称超速本を読 んでください ✍
29.
ご静聴ありがとうございました
Download