📖

個人的に参考にしているフロントエンドのパフォーマンスに関するリソースまとめ

2022/03/12に公開

概要

フロントエンドのパフォーマンスに関して個人的に参考にさせて頂いているリソースをまとめました。

概要を抑える本2冊

2冊とも素晴らしい本でした。
なぜフロントエンドのパフォーマンスが重要なのかから始まり、ブラウザの挙動、計測手段、実際のチューニングの方法まで包括的に説明してくださっています。
どちらかの本を読むだけでも、十分なパフォーマンスのチューニングを行えるのではないかと個人的に思いました。

https://www.amazon.co.jp/Webフロントエンド-ハイパフォーマンス-チューニング-久保田-光則/dp/4774189677

https://www.amazon.co.jp/Webページ速度改善ガイド-使いやすさは「速さ」から始まる-WEB-PRESS-plus/dp/477419400X/ref=pd_lpo_1?pd_rd_i=477419400X&psc=1

ブラウザの挙動を理解する

フロントエンドのパフォーマンスのチューニングを行う上でブラウザの挙動を理解するのは非常に重要だと考えています。
下記の記事はモダンなブラウザの挙動を非常にわかり易く説明してくれています。

https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/

Web Vitals

WebvitalsはGoogleが提唱するWebサイトの品質を図る様な基準です。

Web Vitals は、Web 上での優れたユーザー エクスペリエンスの提供に欠かすことのできない品質シグナルに関する統一的なガイダンスの提供を目的とした、Google によるイニシアチブです。
Google Webvitals

Googleが提唱しているので本家Googleが包括的かつ、詳細までカバーした親切なドキュメントを多数提供してくれています。
下記のリンクから行けば全てのWebvitalsに関しての情報に辿り着けるはずです。

https://web.dev/vitals/

Bundleサイズ測定

使用しているModule Bundlerに応じて下記の様なBundle Analyzerを使用する事でバンドルサイズを確認する事ができます。

Webpack

https://github.com/webpack-contrib/webpack-bundle-analyzer

https://github.com/chrisbateman/webpack-visualizer

Rollup

https://github.com/doesdev/rollup-plugin-analyzer

ライブラリ毎のサイズ測定

ライブラリ選定の際にバンドルサイズを測るのに使用するのがBundlePhobiaです。

https://bundlephobia.com/

具体的な技術 ・ 実践練習

株式会社サイバーエージェントや株式会社リクルートがハッカソン形式でフロントエンドのパフォーマンスチューニングを競う場を提供してくれています。

https://developers.cyberagent.co.jp/blog/archives/32747/

https://engineers.recruit-jinji.jp/event/20-speedhackathon/

特に下記の様な解説記事を記載してくださっており、実際に開発している際に盛り込める具体的なテクニック等が詰め込まれており個人的にとても参考になりました。

https://github.com/CyberAgentHack/web-speed-hackathon-2020/wiki/Web-Speed-Hackathon-Online-出題のねらいと解説

React(おまけ)

個人的にフロントのフレームワークでReactを使用する事が多いので諸々溜まっていきました。

ツール

https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en

https://github.com/welldone-software/why-did-you-render

参考になった記事

https://blog.recruit.co.jp/rtc/2018/09/19/react_spa_performance_tuning/

https://blog.logrocket.com/speed-up-react-app-dynamic-imports-route-centric-code-splitting/

https://linguinecode.com/post/code-splitting-react-router-with-react-lazy-and-react-suspense

https://qiita.com/teradonburi/items/5b8f79d26e1b319ac44f

https://tmegos.hatenablog.jp/entry/react-re-render-why-did-you-render

https://reactjs.org/docs/perf.html

https://brycedooley.com/debug-react-rerenders/

Discussion