圖片最佳化 (Image Optimization)
根據 Web Almanac 的數據,圖片佔據了典型網站 頁面大小 的很大一部分,並且會對您網站的 LCP 效能 產生相當大的影響。
Next.js 的 Image 元件擴展了 HTML <img>
元素,並加入了自動圖片優化的功能。
- 尺寸優化: 使用現代圖片格式,例如 WebP 和 AVIF,自動為每個裝置提供大小合適的圖片。
- 視覺穩定性: 在圖片載入時自動防止 版面偏移。
- 更快的頁面載入速度: 使用原生瀏覽器延遲載入功能,僅在圖片進入視口時才載入圖片,並可選用模糊漸入的佔位圖。
- 資源彈性: 即使圖片儲存在遠端伺服器上,也能夠按需調整圖片大小。
🎥 觀看影片: 了解更多關於如何使用
next/image
的資訊 → YouTube (9 分鐘)。
用法
import Image from 'next/image'
您可以接著定義圖片的 src
(本地或遠端)。
本地圖片
要使用本地圖片,請 `import` 您的 `.jpg`、`.png` 或 `.webp` 圖片檔案。
Next.js 會根據匯入的檔案 自動判斷 圖片的原始 `width` 和 `height`。這些值用於確定圖片比例,並在圖片載入時防止 累積版面偏移 (CLS)。
import Image from 'next/image'
import profilePic from '../public/me.png'
export default function Page() {
return (
<Image
src={profilePic}
alt="Picture of the author"
// width={500} automatically provided
// height={500} automatically provided
// blurDataURL="data:..." automatically provided
// placeholder="blur" // Optional blur-up while loading
/>
)
}
警告: 不支援動態的 `await import()` 或 `require()`。`import` 必須是靜態的,以便在建置時進行分析。
您可以選擇在 `next.config.js` 檔案中設定 `localPatterns`,以便允許特定圖片並封鎖所有其他圖片。
module.exports = {
images: {
localPatterns: [
{
pathname: '/assets/images/**',
search: '',
},
],
},
}
遠端圖片
要使用遠端圖片,src
屬性應為 URL 字串。
由於 Next.js 在建置過程中無法存取遠端檔案,您需要手動提供 width
、height
和選用的 blurDataURL
屬性。
width
和 height
屬性用於推斷圖片的正確長寬比,並避免圖片載入時造成版面偏移。 width
和 height
並*不*決定圖片檔案的渲染大小。深入瞭解 圖片尺寸調整。
import Image from 'next/image'
export default function Page() {
return (
<Image
src="https://s3.amazonaws.com/my-bucket/profile.png"
alt="Picture of the author"
width={500}
height={500}
/>
)
}
為了安全地允許最佳化圖片,請在 next.config.js
中定義支援的 URL 模式清單。盡可能明確具體,以防止惡意使用。例如,以下設定只允許來自特定 AWS S3 儲存貯體的圖片
module.exports = {
images: {
remotePatterns: [
{
protocol: 'https',
hostname: 's3.amazonaws.com',
port: '',
pathname: '/my-bucket/**',
},
],
},
}
深入瞭解 remotePatterns
設定。如果您想對圖片 src
使用相對 URL,請使用 loader
。
網域
這有幫助嗎?