Webアプリケーションのパフォーマンス最適化ガイド
2024-01-20
Webアプリケーションのパフォーマンス最適化ガイド
ユーザー体験を向上させるための、実践的なパフォーマンス最適化手法について解説します。
1. 読み込み速度の最適化
バンドルサイズの削減
不要なコードを削除し、バンドルサイズを最小限に抑えます。
// Next.jsでのダイナミックインポート
const DynamicComponent = dynamic(() => import('./HeavyComponent'), {
loading: () => <LoadingSpinner />,
ssr: false,
})
コード分割
ルートベースでのコード分割を実装します。
// Reactでのコード分割
const Dashboard = React.lazy(() => import('./Dashboard'))
function App() {
return (
<Suspense fallback={<Loading />}>
<Dashboard />
</Suspense>
)
}
2. レンダリングパフォーマンス
メモ化の活用
不要な再レンダリングを防ぎます。
// useMemoの使用例
const expensiveValue = useMemo(() => {
return someExpensiveCalculation(prop1, prop2)
}, [prop1, prop2])
// useCallbackの使用例
const handleClick = useCallback(() => {
console.log('クリックされました')
}, [])
3. 画像最適化
画像フォーマットの選択
用途に応じて適切なフォーマットを選択します。
フォーマット | 用途 | 特徴 |
---|---|---|
WebP | 写真・画像全般 | 高圧縮・高品質 |
SVG | アイコン・ロゴ | 拡大縮小が可能 |
AVIF | 次世代フォーマット | さらなる圧縮率 |
遅延読み込み
// 画像の遅延読み込み
<img
src="large-image.jpg"
loading="lazy"
alt="大きな画像"
width="800"
height="600"
/>
4. キャッシュ戦略
ブラウザキャッシュの活用
// Service Workerでのキャッシュ
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((response) => {
return response || fetch(event.request)
})
)
})
パフォーマンス計測
主要な指標
-
First Contentful Paint (FCP)
- ユーザーが最初のコンテンツを目にするまでの時間
- 目標: 2秒以内
-
Largest Contentful Paint (LCP)
- メインコンテンツの読み込み完了時間
- 目標: 2.5秒以内
-
Time to Interactive (TTI)
- インタラクションが可能になるまでの時間
- 目標: 3.8秒以内
これらの最適化テクニックを適切に組み合わせることで、快適なユーザー体験を提供できるWebアプリケーションを実現できます。