7. Performance
Next.jsは、デフォルト でパフォーマンスを最適化するためのさまざまな機能を提供しています。これらの機能を活用することで、アプリケーションの速度とユーザー体験を向上させることができます。
画像の最適化
Next.jsのnext/image
コンポーネントは、画像の自動最適化を提供します。これにより、画像のサイズを自動的に調整し、WebPなどの最適な形式で配信します。
使用例
import Image from 'next/image';
export default function Home() {
return (
<div>
<h1>Optimized Image Example</h1>
<Image
src="/path/to/image.jpg"
alt="Example Image"
width={500}
height={300}
layout="responsive"
/>
</div>
);
}
動的インポート
Next.jsは、動的インポートをサポートしており、必要なときにのみモジュールをロードすることで、初期ロード時間を短縮します。
使用例
import dynamic from 'next/dynamic';
const DynamicComponent = dynamic(() => import('../components/HeavyComponent'), {
loading: () => <p>Loading...</p>,
ssr: false, // クライアントサイドでのみロード
});
export default function Home() {
return (
<div>
<h1>Dynamic Import Example</h1>
<DynamicComponent />
</div>
);
}
Code Splitting
Next.jsは、デフォルトでコードスプリッティングを行い、アプリケーションの各ページに必要なコードのみをロードします。これにより、初期ロード時間が短縮されます。
使用例
特定の設定は不要で、Next.jsは自動的にコードスプリッティングを実行します。
AMPサポート
Next.jsは、AMP(Accelerated Mobile Pages)をネイティブでサポートしています。AMPを使用することで、モバイルデバイスでのページのロード時間を大幅に短縮できます。
使用例
-
AMPページの作成:
// pages/amp.js
export const config = { amp: true };
export default function AmpPage() {
return (
<div>
<h1>My AMP Page</h1>
<p>This is an AMP page.</p>
</div>
);
} -
AMPコンポーネン トの使用:
Next.jsは、
next/amp
モジュールを使用してAMP専用コンポーネントを提供します。import { Amp } from 'next/amp';
export default function MyAmpComponent() {
return (
<Amp>
<amp-img
src="/static/image.jpg"
width="600"
height="400"
layout="responsive"
alt="Example Image"
/>
</Amp>
);
}
レンダリングの最適化
Next.jsは、静的生成(Static Generation)とサーバーサイドレンダリング(Server-Side Rendering)をサポートしており、適切な方法でレンダリングを選択することでパフォーマンスを向上させることができます。
静的生成(Static Generation)
静的生成を使用すると、ビルド時にHTMLを生成し、パフォーマンスが向上します。
// pages/index.js
export async function getStaticProps() {
// データフェッチング
return {
props: {
// 取得したデータを返す
},
};
}
export default function Home({ data }) {
return (
<div>
<h1>Static Generation</h1>
{/* データを表示 */}
</div>
);
}
サーバーサイドレンダリング(Server-Side Rendering)
サーバーサイドレンダリングを使用すると、リクエストごとにページがレンダリングされ、動的なデータを扱うのに適しています。
// pages/index.js
export async function getServerSideProps() {
// データフェッチング
return {
props: {
// 取得したデータを返す
},
};
}
export default function Home({ data }) {
return (
<div>
<h1>Server-Side Rendering</h1>
{/* データを表示 */}
</div>
);
}
インクリメンタル静的再生成(ISR)
ISR(Incremental Static Regeneration)は、ビルド後もページのコンテンツを更新する機能です。これにより、静的生成のパフォーマンスを維持しつつ、最新のデータを提供できます。
使用例
// pages/index.js
export async function getStaticProps() {
const res = await fetch('https://api.example.com/data');
const data = await res.json();
return {
props: {
data,
},
revalidate: 60, // 60 秒ごとにページを再生成
};
}
export default function Home({ data }) {
return (
<div>
<h1>Incremental Static Regeneration</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
このように進めていきます。他に追加や修正の希望があればお知らせください。