سفارش تبلیغ
صبا ویژن

سئو- استفاده از همه شگردها برای بالابردن ترافیک سایت

بررسی دقیق Cache-Control در کش شرطی

کلا ما دو روش منطقی برای افزایش سرعت یک صفحه اینترنتی داریم
1- کم کردن تعداد درخواستها از سرور (مثلا با کم کردن عکس ها و کدهای الحاقی جاوا اسکریپت و css ها و...)
2- کم کردن حجم داده هایی که باید از سرور به مرورگر منتقل شود (مثل فشردهسازی محتوا با gzip یا کامپرس کردن عکس ها)
با کش استاتیک یا cache static  ما به هر دو خواسته می رسیم و با کش شرطی  با ETAGS  خواسته دوم  حاصل میشود

اهدافی که ما از  کش کردن محتوا داریم عبارتند از

1- پایین  نگهداشتن لود سرور
2-لود شبکه
3- زمان تاخیر کاربر
به عنوان مثال مرورگر اینترنت اکسپلور برای تاعمل کش با سرور به صورت زیر ارسال هدر دارد
Pragma: no-cache
با این هدر مرورگر به سرور می فهماند که تمایلی به استفاده از کش موجود ندارد و ترجیح می دهد از نسخه سرور استفاده کند (این هدر با ctrl+F5 ایجاد می شود)
If-Modified-Since: datetime
مرورگر منتظر پاسخ سرور است که آیا از این تاریخ فایل تغییر داشته است یا خیر
If-None-Match: etagvalue
مرورگر به سرور اعلام می کند مشخصه فایل(ETAG) که من در اختیار دارم به صورت زیر است اگر نسخه جدیدتری داری اطلاع بده 
هر دو هدر If-Modified-Since یا  If-None-Match حالت کش شرطی را به وجود می آورند 

در حالت کش استاتیک ارسال هدر از هیچ نوع را نداریم 

در حالت شرطی سرور یا مجددا فایل را با کد 200 ارسال می کند و یا تنها هدر 304 را بصورت زیر می فرستد
HTTP/304 Not Modified
حال با این مقدمه برویم سر اصل مبحث یعنی
بررسی دقیق   Cache-Control در کش شرطی
در حالت شرطی ما هدری داریم به نام  Cache-Control
که انتخاب های (یکی یا برخی ) ‌زیر را برای آن داریم
no-store, no-cache, must-revalidate, pre-check, post-check
حالت no-store به معنی این است که مرورگر کش نمی کند
 no-cache به معنی این است که مرورگر کش می کند ولی تغییرات را با  هربار  رفرش جویاست 
must-revalidate به معنی لازم اجرا دانستن سوال از  سرور برای کش است
و اما دو حالت دیگر یعنی  pre-check, post-check ویژه اینترنت اکسپلور هست
post-check یعنی تا این زمان نیازی به استعلام برای تغییر کش نیست
pre-check یعنی تا قبل از این زمان حتما از تغییر نکردن کش مطمئن شو
مثلا اینطور می شود گفت که با کد زیر 
Control: post-check=10; pre-check=120
مکالمه مرورگر با سرور اینگونه است که 
تا ثانیه 10 ام که هیچ مکالمه ای انجام نمی شود و مانند کش استاتیک برخورد می شود
از ثانیه 10 تا 120 برای کش سوال میشود
بعد از ثانیه 120 کش منقضی است و مرورگر وجود آن را نادید می گیرد
با این توضیحات معلوم میشود که pre-check شباهت بسیاری به max-age دارد
با این تفاوت که ie تا زمانیکه به زمان post-check نرسیده باشد از هدر استفاده نمی کند (کش استاتیک)
این دو حتما باید با هم مقدار دهی شوند و در صورتیکه یکی از آنها مقدار دهی نشود خطا می باشد
مقدار داده شده عدد و به معنای ثانیه است مثلا عدد 60 یعنی یک دقیقه
اگر هر دو صفر باشند هیچکدام در نظر گرفته نمی شوند
post-check همیشه باید کوچکتر یا مساوی با  pre-check باشد در غیر اینصورت خطا است
اگر post-check صفر باشد و pre-check  عددی بزرگتر از صفر باشد تنها اتفاقی که می افتد محتوای صفحه دوبار دانلود می شود 
پس اگر می خواهید بدون دلیل صفحه اتان دو بار در مرورگر بار گذاری شود از کد زیر استفاده نمایید
Control: post-check=0; pre-check=1
اما حالت منطقی این است که همیشه به post-check عددی بدهید که موجب دانلود بی دلیل صفحه در هربار نشود مثلا می توانید 10 بدهید

مطلب برداشت آزادی بود از مطلب:

 Internet Explorer"s Cache-Control Extensions