~3 دقیقه مطالعه • بروزرسانی ۶ آبان ۱۴۰۴
بهینهسازی تصاویر
کامپوننت next/image بهصورت پیشفرض با next start در حالت self-hosted کار میکند. همچنین میتوانید از loader سفارشی در next.config.js استفاده کنید.
- تصاویر در زمان اجرا بهینه میشوند، نه در زمان build
- میتوانید بهینهسازی را غیرفعال کرده و فقط از مزایای layout و فرمت استفاده کنید
- در سیستمهای لینوکس glibc ممکن است نیاز به تنظیمات حافظه باشد
پشتیبانی از Proxy
Proxy در حالت self-hosted با next start بدون نیاز به پیکربندی فعال است. از Edge runtime برای اجرای سریعتر قبل از پاسخدهی استفاده میکند.
- در حالت static export پشتیبانی نمیشود
- برای منطق پیچیدهتر از Server Component یا سرور سفارشی استفاده کنید
متغیرهای محیطی
Next.js از متغیرهای محیطی در زمان build و اجرا پشتیبانی میکند:
- بهصورت پیشفرض فقط در سرور قابل دسترسی هستند
- برای دسترسی در کلاینت باید با
NEXT_PUBLIC_شروع شوند - در رندر دینامیک در زمان اجرا ارزیابی میشوند
const value = process.env.MY_VALUEکشینگ و ISR
Next.js بهصورت خودکار صفحات استاتیک، خروجی ISR، و فایلهای استاتیک را کش میکند. کش بهصورت پیشفرض روی دیسک و حافظه ذخیره میشود.
- فایلهای immutable:
Cache-Control: public, max-age=31536000, immutable - صفحات ISR:
s-maxageوstale-while-revalidate - صفحات دینامیک:
private, no-cache, no-store
استفاده از cache handler سفارشی
برای اشتراکگذاری کش بین کانتینرها یا غیرفعالسازی حافظه داخلی:
// next.config.js
module.exports = {
cacheHandler: require.resolve('./cache-handler.js'),
cacheMaxMemorySize: 0,
}مثال cache-handler.js:
const cache = new Map()
module.exports = class CacheHandler {
async get(key) { return cache.get(key) }
async set(key, data, ctx) {
cache.set(key, { value: data, lastModified: Date.now(), tags: ctx.tags })
}
async revalidateTag(tags) {
tags = [tags].flat()
for (let [key, value] of cache) {
if (value.tags.some(tag => tags.includes(tag))) {
cache.delete(key)
}
}
}
resetRequestCache() {}
}کش بیلد و نسخهگذاری
برای استفاده از بیلد ثابت بین کانتینرها:
generateBuildId: async () => process.env.GIT_HASHNext.js در صورت تشخیص اختلاف نسخه، اپ را ریفرش میکند. برای حفظ وضعیت، از localStorage یا URL state استفاده کنید.
استریمینگ و Suspense
استریمینگ در App Router پشتیبانی میشود. برای فعالسازی در Nginx:
// next.config.js
headers: [
{
source: '/:path*{/}?',
headers: [{ key: 'X-Accel-Buffering', value: 'no' }],
},
]فایلهای استاتیک و CDN
برای میزبانی فایلها در دامنه دیگر:
assetPrefix: 'https://cdn.example.com'صفحات دینامیک با Cache-Control: private و صفحات استاتیک با Cache-Control: public ارسال میشوند.
جمعبندی
با میزبانی مستقل اپلیکیشن Next.js، کنترل کامل بر کشینگ، متغیرهای محیطی، استریمینگ، و استقرار خواهید داشت. با پیکربندی مناسب، میتوانید عملکرد را بهینه کرده و سازگاری بین محیطها را حفظ کنید.
نوشته و پژوهش شده توسط دکتر شاهین صیامی