Catch up on highlights from Firebase at Google I/O 2023. Learn more

رفتار حافظه پنهان را مدیریت کنید

میزبانی Firebase از یک CDN جهانی قدرتمند استفاده می کند تا سایت شما را تا حد امکان سریع کند.

هر محتوای استاتیک درخواستی به طور خودکار در CDN ذخیره می شود . اگر محتوای سایت خود را مجدداً مستقر کنید، میزبانی Firebase به طور خودکار تمام محتوای استاتیک ذخیره شده شما را در CDN تا درخواست بعدی پاک می کند.

با این حال، از آنجایی که سرویس‌های Cloud Functions و Cloud Run محتوا را به صورت پویا تولید می‌کنند، محتوای یک URL مشخص می‌تواند بر اساس مواردی مانند ورودی کاربر یا هویت کاربر متفاوت باشد. برای توضیح این موضوع، درخواست‌هایی که توسط کد پشتیبان مدیریت می‌شوند به‌طور پیش‌فرض در CDN ذخیره نمی‌شوند ، به استثنای درخواست‌هایی که خطاهای 404 را برمی‌گردانند. برای پاک کردن نتایج کش 404، میزبانی Firebase را مجدداً مستقر کنید. استقرار مجدد توابع Cloud و Cloud Run به طور خودکار کش را باطل نمی کند.

با این حال، می‌توانید رفتار حافظه پنهان را برای محتوای پویا پیکربندی کنید . به عنوان مثال، اگر یک تابع فقط به صورت دوره‌ای محتوای جدید تولید می‌کند، می‌توانید با ذخیره کردن محتوای تولید شده در حافظه پنهان برای حداقل مدت زمان کوتاه، سرعت برنامه خود را افزایش دهید.

همچنین می‌توانید به طور بالقوه هزینه‌های اجرای تابع را کاهش دهید، زیرا محتوا از CDN به جای یک تابع راه‌اندازی ارائه می‌شود. درباره بهینه سازی اجرای عملکرد و خدمات در مستندات Cloud Functions و Cloud Run بیشتر بخوانید.

در اسناد توسعه‌دهنده وب Google درباره رفتار ذخیره‌سازی حافظه پنهان بیشتر بدانید.

Cache-Control را تنظیم کنید

ابزار اصلی که برای مدیریت کش برای محتوای پویا استفاده می کنید، هدر Cache-Control است. با پیکربندی این هدر، می توانید هم به مرورگر و هم به CDN ارتباط برقرار کنید که چه مدت محتوای شما می تواند کش شود. در تابع خود، Cache-Control به این صورت تنظیم می کنید:

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

در این عنوان مثال، دستورالعمل ها سه کار را انجام می دهند:

  • public - کش را به عنوان public علامت گذاری می کند. این بدان معنی است که هم مرورگر و هم سرورهای میانی (به معنای CDN برای میزبانی Firebase) می توانند محتوا را کش کنند.

  • max-age - به مرورگر و CDN می گوید که چند ثانیه می توانند محتوا را در حافظه پنهان نگه دارند. هنگامی که زمان تعیین شده منقضی می شود، مرورگر و CDN باید محتوا را با سرور مبدا تأیید مجدد کنند. در عنوان مثال، به مرورگر و CDN اجازه می‌دهیم تا محتوا را به مدت پنج دقیقه در حافظه پنهان نگه دارند (برای کنترل‌های خاص برای ذخیره CDN به s-maxage زیر مراجعه کنید).

  • s-maxage - دستور max-age را فقط برای حافظه پنهان CDN لغو می کند. به CDN می گوید که چند ثانیه می تواند محتوا را کش کند. هنگامی که زمان تعیین شده منقضی می شود، CDN باید محتوا را با سرور مبدا تأیید مجدد کند. در هدر مثال، ما تنظیمات max-age را فقط برای CDN لغو می‌کنیم و به CDN اجازه می‌دهیم محتوا را به مدت ده دقیقه کش کند.

برای max-age و s-maxage ، مقادیر آن‌ها را روی طولانی‌ترین زمانی تنظیم کنید که با دریافت محتوای قدیمی راحت هستید. اگر یک صفحه هر چند ثانیه تغییر می کند، از مقدار زمانی کمی استفاده کنید. با این حال، انواع دیگر محتوا را می توان برای ساعت ها، روزها یا حتی ماه ها به صورت ایمن در حافظه پنهان نگه داشت.

می‌توانید درباره هدر Cache-Control در شبکه توسعه‌دهنده Mozilla و در اسناد توسعه‌دهنده وب Google اطلاعات بیشتری کسب کنید.

محتوای کش چه زمانی ارائه می شود؟

مرورگر و CDN محتوای شما را بر اساس موارد زیر ذخیره می کنند:

  • نام میزبان
  • مسیر
  • رشته پرس و جو
  • محتوای سرصفحه های درخواست مشخص شده در هدر Vary

هدرها را تغییر دهید

هدر Vary تعیین می‌کند که از کدام سرصفحه‌های درخواست باید برای ارائه پاسخ مناسب استفاده شود (این که آیا محتوای ذخیره‌شده معتبر است یا اینکه محتوا باید با سرور مبدا اعتبارسنجی مجدد شود).

میزبانی Firebase به طور خودکار یک هدر Vary مناسب را در پاسخ شما برای موقعیت‌های رایج تنظیم می‌کند. بیشتر اوقات، لازم نیست نگران هدر Vary باشید. با این حال، در برخی موارد استفاده پیشرفته، ممکن است هدرهای دیگری داشته باشید که باید روی حافظه پنهان تأثیر بگذارند. در این صورت، می توانید هدر Vary را روی پاسخ خود تنظیم کنید. مثلا:

res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');

در این مورد، مقدار هدر Vary برابر است با:

vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization

با این تنظیمات، دو درخواست مشابه با هدرهای X-My-Custom-Header به طور جداگانه ذخیره می شوند. توجه داشته باشید که وقتی درخواستی برای محتوای پویا ارسال می شود، هاستینگ به طور پیش فرض Cookie و Authorization به هدر Vary اضافه می کند. این تضمین می‌کند که هر جلسه یا سرصفحه مجوز کوکی که استفاده می‌کنید، بخشی از کلید حافظه پنهان است، که از نشت تصادفی محتوا جلوگیری می‌کند.

همچنین توجه داشته باشید:

  • فقط درخواست های GET و HEAD می توان کش کرد. درخواست‌های HTTPS با استفاده از روش‌های دیگر هرگز در حافظه پنهان ذخیره نمی‌شوند.

  • هنگام افزودن تنظیمات به هدر Vary مراقب باشید. هرچه تنظیمات بیشتری را اضافه کنید، احتمال اینکه CDN بتواند محتوای کش را ارائه دهد کمتر است. همچنین به یاد داشته باشید که Vary بر اساس هدرهای درخواست است، نه هدرهای پاسخ .

استفاده از کوکی ها

هنگام استفاده از میزبانی Firebase همراه با توابع Cloud یا Cloud Run، کوکی‌ها معمولاً از درخواست‌های دریافتی حذف می‌شوند. این برای اجازه دادن به رفتار کارآمد حافظه پنهان CDN ضروری است. فقط کوکی __session با نام خاص مجاز است برای اجرای برنامه شما ارسال شود.

در صورت وجود، کوکی __session به طور خودکار بخشی از کلید حافظه پنهان می شود، به این معنی که دریافت پاسخ ذخیره شده دیگری برای دو کاربر با کوکی های متفاوت غیرممکن است. فقط در صورتی از کوکی __session استفاده کنید که برنامه شما بسته به مجوز کاربر، محتوای متفاوتی را ارائه دهد.