امروزه زمان بارگذاری صفحه به شاخصه مهمی از تجربه کاربری تبدیل شده است که حتی توسط گوگل نیز به عنوان یک امتیاز اصلی برای الگوریتم رتبه بندی خود در نظر گرفته میشود.
عملیات کشینگ مطمئنا یکی از مهمترین عناصر برای بهینه سازی بارگذاری صفحه است. با این حال استفاده نادرست از آن میتواند مشکلات دیگری را به دنبال داشته باشد.
این مقاله به شما کمک می کند تا درک کنید چرا راه اندازی کشینگ برای وبسایتها ضروری است و شما را از مشکلات رایج آگاه میکند. ابتدا بیایید مزایای آن را با جزئیات بررسی کنیم.
1. بهبود بارگذاری صفحه و زمان پاسخگویی
با استفاده از فرایند کشینگ بازیابی اطلاعات سریعتر میشود، زیرا این امر نیاز به پیمودن مسیرهای طولانی در شبکه را محدود میکند. اگر محتوا را در مرورگر کش کنیم، بازیابی آنی انجام میشود.
با این حال ممکن است کاربر در بارگیری اولیه صفحه کمی تاخیر داشته باشد تا دادهها در حافظه کش قرار گیرند.
بارگذاری تنبل برای کشینگ
در عمل بسیاری از استراتژیهای کشینگ وجود دارد که میتوانید از آنها استفاده کنید. یکی از این موارد استراتژی بارگیری تنبل است که زمان بارگیری صفحه را بهبود میبخشد و فقط در صورت لزوم دادهها را در حافظه کش بارگیری میکند.
با این کار از پر کردن حافظه کش با اطلاعات غیرضروری جلوگیری میشود.
کش کردن دادههای پویا
کش کردن محتوای استاتیک در جایی که مرورگر از پیچیدگیها مراقبت میکند، امنتر از ذخیره محتوای پویا است. با این حال محتوای پویا متناسب نخواهد بود، زیرا مرورگرها برای عدم اعتبارسنجی حافظه کش قابل پیش بینی نیستند.
بنابراین اگر نیاز به کش کردن محتوای پویا دارید، توصیه میکنم از یک شبکه تحویل محتوا (CDN) استفاده کنید.
با استفاده از CDN، محتوا در مسیر شبکه به کاربر نزدیکتر میشود و تأخیر را کاهش میدهد. علاوه بر این میتوانید با استفاده از دستورالعملهای مربوطه، اعتبارسنجی حافظه کش را در CDN انجام دهید. این یک تمایز واضح است که باعث میشود برخلاف مرورگرها، برای ذخیره محتوای پویا مناسب باشد.
2. بهبود در دسترس بودن دادهها
حافظه کش به بهبود در دسترس بودن وبسایت در سطوح مختلف کمک میکند. وقتی محتوا را در مرورگر کش میکنیم، از بروز مشکلات مختلف هنگام ضعیف بودن شبکه جلوگیری میشود.
همچنین میتوانیم از سرویس دهندهها برای بهبود تجربه کار به صورت آفلاین استفاده کنیم.
به علاوه هنگامی که سرور مبدا آفلاین میشود، استفاده از CDN به مدیریت مشکلات در دسترس بودن کمک میکند. به عنوان مثال هنگام انجام انتشار یا به روزرسانی سرور، حافظه کش میتواند به عنوان یک failover عمل کند.
3. یک گزینه بهتر در مقیاس پذیری
رسیدگی به بسیاری از درخواستها از طریق یک سرور به یک زیرساخت قدرتمند (حافظه بهتر، ذخیره سازی، قدرت پردازش و ...) نیاز دارد. نگهداری چنین سروری با قابلیت دسترسی بالا میتواند بسیار پرهزینه باشد.
از آنجا که کشینگ در فرانت-اند تعداد درخواستهای ارسال شده به سرور را کاهش میدهد، از نیاز به یک سیستم بسیار قدرتمند جلوگیری میشود.
به عنوان مثال اگر تعداد زیادی تصاویر با وضوح بالا در وبسایت خود داشته باشید، واکشی آن فایلها همیشه منجر به ترافیک شدید در سرور میشود. بنابراین اگر این موارد کش شوند، میتوان درصد بیشتری از ترافیک را حذف کرد. بنابراین سیستمی کم قدرت نیز مناسب خواهد بود.
با استفاده از حافظه کش فرانت-اند حتی SMEها نیز شانس بیشتری برای مقیاس گذاری و پذیرش ترافیک بالا دارند که فرصت بیشتری برای رقابت در بازار را فراهم میکند.
تا اینجا بررسی کردیم که چگونه کشینگ میتواند برنامه شما را بهتر کرده و آن را بهبود بخشد. به نظر شما آیا بهره گیری از حافظه کش همیشه مناسب است؟ آیا ممکن است محتوای کش شده مشکلاتی ایجاد کنند؟ در ادامه خواهید فهمید.
1. تنظیم نادرست هدرهای انقضا
هدرهای انقضا (Time To Live - TTL) تعیین میکنند که محتوا هر چند وقت یکبار به روز میشوند. هدرهای انقضا درست تنظیم شده حافظه کش را به موقع فاقد اعتبار کرده و به کاربران امکان میدهد آخرین به روزرسانیهای برنامه را مشاهده کنند. با این کار از بارگیری دادههای قدیمی جلوگیری میشود.
بنابراین اگر به منظور تغییر مداوم محتوا یک هدر برای آینده تعیین کرده باشید، کاربران دادههای قدیمی را در سایت مشاهده میکنند. هدرهای حافظه کش در آینده فقط برای محتوای استاتیک مناسب هستند که ممکن است اغلب تغییر نکند. بنابراین برای به روز نگه داشتن برنامه، تنظیم درست و به موقع هدرهای انقضا بسیار مهم است.
برای تنظیم TTL در محتوای کش شده، دو واقعیت اصلی باید به عنوان بهترین روش در نظر گرفته شود.
- نوع منبع - اگر نوع منبع ساکن باشد، همانطور که در بالا ذکر شد میتوان TTLهای طولانیتری اختصاص داد. در عوض اگر نوع منبع پویا باشد، TTLهای کوتاهتر به تازه نگه داشتن دادهها کمک میکنند.
- استفاده از منبع - TTL باید براساس تعداد دفعات استفاده از محتوا تنظیم شود. به عنوان مثال در یک سایت تجارت الکترونیکی با وجود قیمتهای ناپایدار برای محصولات، باید TTL تا پایان روز منقضی شود تا قیمتها به روز باشد و اطلاعات صحیح را به کاربر نشان دهد.
به یاد داشته باشید پس از تنظیم TTL، بر حافظه کش مرورگر کنترل دارید. بنابراین شاید لازم باشد فرکانس انتشار را نیز در نظر بگیرید و اطمینان حاصل کنید که صفحات میتوانند از نسخه صحیح assetها (CSS ، JS و ...) استفاده کنند.
2. فقط کش کردن صفحه اصلی
بیشتر اوقات توسعه دهندگان فقط بر روی بهبود زمان بارگذاری صفحه برای صفحه اصلی وبسایت تمرکز دارند. با این حال هنگامی که یک کاربر از سایت شما بازدید میکند، قبل از خرید چند صفحه را مرور میکند.
بنابراین حتی اگر صفحه اصلی شما خیلی سریع بارگیری شود اما صفحات دیگر عملکرد خوبی نداشته باشند، احتمالا کاربر خرید نخواهد کرد.
در صورت بروز چنین اتفاقی، صرف این همه تلاش برای بهینه سازی صفحه اصلی نتایج مورد انتظار را به شما نمیدهد. بنابراین مهم است که استراتژیهای کشینگ برای کل سایت یا حداقل تمام صفحات مهمی که به کاربر کمک میکند تا خرید کند، در نظر گرفته شوند.
3. عدم ارتباط به روزرسانیها با کاربر
هنگام به روزرسانی محتوا باید نسخه جدیدی برای کاربران بارگیری شود. اگر تازه سازی محتوا به طور خودکار قابل اجرا نباشد (با استفاده از استراتژیهای عدم اعتبارسنجی حافظه کش)، باید کاربران را برای انجام به روزرسانی آگاه کنیم.
عدم برقراری ارتباط در این مورد ممکن است منجر به نمایش دادههای قدیمی به کاربر شود. بنابراین مهم است که یک نوتیفیکیشن ارسال کنید یا یک بنر نمایش دهید که از کاربر میخواهد سایت را رفرش کند تا هنگام دریافت نسخه جدید برنامه آخرین به روزرسانیها بازیابی شوند.
همچنین میتوانید از یک فناوری مانند WebSockets برای اطلاع از برنامه وب در دسترس بودن نسخه جدید استفاده کنید. پیام میتواند به عنوان یک بنر در صفحه اصلی نمایش داده شود که در آن دستورالعمل بارگیری مجدد صفحه وجود دارد.
4. عدم بررسی تنظیمات کش
اولین استراتژی کشینگ که در وبسایت شما پیاده سازی شده است ممکن است بهترین نباشد که رشد کند و بازدید بیشتری را به خود جلب کند. همانطور که وبسایت را با محتوا و ویژگیهای جدید به روز میکنیم، بررسی مداوم تنظیمات و پیکربندی حافظه کش نیز بسیار مهم است.
به عنوان مثال اگر وبسایت شما در ابتدا با محتوای ثابت شروع به کار کند، تاریخ انقضا هدرهای حافظه کش به تاریخهای بسیار دور تنظیم میشود. با این حال با پیاده سازیهای جدید اگر محتوایی وجود داشته باشد که بیشتر تغییر میکند، تنظیمات حافظه کش نیز باید با TTLهای پایینتر اصلاح شود تا عناصر تازه را بازیابی کند.
5. استراتژی عدم اعتبار حافظه کش
بی اعتبار کردن حافظه کش برای اینکه به مرورگر بگویید نسخه جدیدی از assetها در دسترس است، بسیار اهمیت دارد. اگر استراتژیهای عدم اعتبارسنجی حافظه کش اجرا نشوند، کاربران برنامه شما همیشه دادههای قدیمی را مشاهده میکنند. نامعتبر بودن حافظه کش به شکست آن کمک کرده و مرورگر را مجبور به بارگیری نسخه جدیدی از assetها میکند.
این بهترین روش برای برنامههای وب تک صفحهای است که از کش کردن صفحه ایندکس در مرورگر جلوگیری میکنند تا بر رندر نسخه قدیمی بعد از انتشار بر ثبات سرویس تأثیر بگذارد.
علاوه بر این از آنجا که HTML معمولا یک بار در سشن کاربر بارگیری میشود، تأثیرش بر عملکرد خیلی ناچیز است.
بیایید چند استراتژی عدم اعتبارسنجی حافظه کش را بررسی کنیم.
- استفاده از کوئری استرینگها - یک فایل متفاوت یا جدید را میتوان از طریق کوئری استرینگ دیگری (v = 3.4.1) در URL نشان داد. اکثر مرورگرها این موضوع را تشخیص داده و یک نسخه جدید را بارگیری میکنند. CDNها هم از این ویژگی پشتیبانی میکنند. اما ممکن است برخی مرورگرها از آن پشتیبانی نکنند.
<link rel="stylesheet" href="style.css?v=3.4.1">
- تغییر نام فایل - هنگامی که یک نسخه جدید نیاز به بارگیری است، میتوان نام فایل را تغییر داد تا مرورگر آن را به عنوان یک تغییر جدید تشخیص دهد.
<link rel="stylesheet" href="index.362124.js">
- استفاده از تاریخ به روز شده فایل - عدم اعتبارسنجی حافظه کش میتواند بر اساس آخرین تاریخ به روز شده فایل اجرا شود.
جمع بندی
همانطور که دیدیم، حافظه کش مزایای زیادی به برنامههای ما میبخشد.
با این حال تعیین بهترین استراتژی کشینگ برای برنامه شما به نیاز پروژه و حوزه کاریتان بستگی دارد. به عنوان مثال فرض کنید وبسایت شما پر از دادههای پویا است که باید کش شوند. در این صورت بهتر است آن را در سطح CDN کش کنید، جایی که میتوان پارامترهای پویا را برای به روزرسانی و رندر محتوای کش شده در نظر گرفت.
همچنین برای مشاهده محتوای کش شده در مرورگر خود میتوانید از ابزارهایی مانند Dev Tools در کروم استفاده کنید.
از طرف دیگر شما باید از استراتژیهای صحیح ذخیره سازی کاملا آگاهی داشته باشید تا از مشکلات احتمالی در طول مراحل توسعه جلوگیری کنید. به علاوه نداشتن استراتژی از داشتن یک مورد اشتباه خیلی بهتر است!
بنابراین مراقب موارد حاشیهای باشید و بهترین روشها و استراتژیها را به کار بگیرید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید