بهترین های پزشکی و پرستاری | اوردامین : همه چیز درباره کش(cache) سمت سرور و کاربر
بهترین های پزشکی و پرستاری | اوردامین : همه چیز درباره کش(cache) سمت سرور و کاربر
  • اوردامین
  • طراحی وب
1403
ارديبهشت
28
جمعه
شمارنده
بازدید امروز : 5532 بازدید
کل بازدید کنندگان امروز : 653 نفر
بازدید کل : 54435917 بازدید
حاضرین در سایت : 17 نفر

تاریخ شروع شمارشگر : 94/03/01

عمر سایت : حدود 9 سال پیش

تعداد کل مطالب : 1214

کش سمت کاربر

با کمک ارسال header مربوطه، می‌توان به براوزر کاربر گفت که هر فایل را چه مدتی روی سیستم کاربر کش کند. مثلا می‌توانید بگویید که تصاویر را یک سال، jsها را سه ماه و css ها را یک ماه و صفحه شما را یک هفته در دستگاه وی کش کند. البته این زمان‌ها برای مثال بود و هر کسی با توجه به میزان تغییرات هریک از محتویات می‌تواند میزان آن را عوض کند. 
برای کش سمت کاربر محتویات استاتیک (js, image, css, fonts) از htaccess استفاده می‌شود با کمک «یکی» از کدهای زیر:
<IfModule mod_expires.c>
   ExpiresActive On
   ExpiresByType image/x-icon            A29030400
   ExpiresByType application/javascript        A2592000
   ExpiresByType application/x-javascript        A2592000
   ExpiresByType text/css                A2592000
   ExpiresByType image/gif                A2592000
   ExpiresByType image/png                A2592000
   ExpiresByType image/jpeg            A2592000
   ExpiresByType application/x-troff        A29030400
   ExpiresByType application/pdf            A29030400
</IfModule>
<IfModule mod_headers.c>
   <FilesMatch ".(gif|jpg|jpeg|png|js|css|htm|html)$">
       Header set Cache-Control "max-age=2592000, public"
   </FilesMatch>
   <FilesMatch ".(ico|rm|pdf)$">
       Header set Cache-Control "max-age=29030400, public"
   </FilesMatch>
</IfModule>
البته راهی که برخی از وبمسترها استفاده می‌کنند، این است که تمام محتویات استاتیک را یکسال کش می‌کنند و در صورت تغییر مثلا یک تصویر، نام آن را عوض می‌کنند و در فایل php (که کش نمی‌شود) نام جدید آن را درج می‌کنند و برخی هم بجای تغییر نام، تاریخ ویرایش فایل را به انتهای نام فایل به عنوان پارامتر درج می‌کنند:
<img src="test.png?1234567890" alt="test" />
که عدد 1234567890 از تابع filemtime محاسبه و چاپ شده است و filemtime تا زمانی که فایل ویرایش نشده، ثابت می‌ماند. 
همچنین در مورد فایل php می‌توان با فراخواین تابع ساده زیر، هر صفحه php مان را به مقدار دلخواه کش کنیم مثلا می‌توان صفحاتی که می‌دانیم تغییرات کمتری در آنها پیش می‌آید را بیشتر و سایر صفحات را به مقدار کمتری در سمت کاربر کش کنیم:
function cache($sec=300)
{
  if(empty($sec))
  {
    @header('Cache-Control: no-cache');
    @header('Expires: -1');
  }
  else
  {
    @header('Pragma: public');
    @header('Cache-Control: maxage='.$sec);
    @header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$sec) . ' GMT');
  }
}
که اگر با هدرهای فوق آشنایی ندارید، توصیه می‌کنم مقاله مختصر و مفید A Beginner's Guide to HTTP Cache Headers را مطالعه نمایید.

کش سمت سرور

کش سمت سرور هم می‌تواند در کوئری‌های SQL انجام شود و هم در محتویاتی که php تولید می‌کند که ما با اولی کاری نداریم فعلا. 
اما در مورد دومی؛ ماژول‌ها، افزونه‌ها و کلاس‌هایی برای این کار وجود دارد که همیشه و برای هر سایتی مناسب نیستند و نصب و یادگیری آنها نیز چندان ساده نیست. 
شخصا این سیستم کش ساده و پایه‌ای را دوست دارم که انعطاف پذیری بالایی دارد. 
همانطور که در لینک فوق می‌بینید، برای کش شدن یک صفحه php بر حسب uri یا آدرس درخواست شده با حذف دامنه (که ممکن است متغیر باشد) در سرور فایلی تولید شده است (که در صورت نبودن یا اکسپایر شدن مجددا تولید می‌شود) که همان فایل به سمت کاربر ارسال می‌شود و مجددا php, mysql وارد کار نمی‌شود که محتویات یک صفحه تولید شود. نهایتا کد مربوطه به کمک htaccess به ابتدا و انتهای تمام فایل‌ها الحاق شده است.

فواید کش چیست؟

پرواضح است که کش سمت کاربر به دلیل درخواست کمتر از سرور در کاهش پهنای باند مصرفی اثر مهمی دارد. 
همچنین کش سمت سرور نیز به دلیل صرفه‌جویی در منابع فیزیکی سرور و کاهش زمان تولید یک صفحه، اثر مهمی سرعت سایت (خصوصا سایتی با ترافیک بالا) دارد.

محدودیت‌های کش چیست؟

همانطور که در اینجا گفته شده؛ همه صفحات یک سایت را نمی‌توان کش کرد. مثلا کش کردن صفحات نتیجه جستجو، پاسخ درخواست‌های ajax متغیر و ... امکان‌پذیر هست اما عملا بسیار کم‌فایده و بعضا مضر است! 
همچنین صفحاتی که تغییرات زیادی دارد (مثلا رای کاربران به نظرات و ...) یا تعداد بازدید آن در زمان درخواست صفحه شمرده می‌شود، با روش تشریح شده در لینک فوق قابل کش‌شدن نیست. 
البته لازم نیست که کش مربوط به کل یک صفحه باشد بلکه می‌توان مثلا همه صفحه را بجز یک ستونش کش کرد یا می‌توان فوتر یا هدر خالی را کش کرد و ... 
همچنین در صورتی که بخش متغیر صفحه، ارزش سئو ندارد (مثل رای به کاربران و تعداد رای هر مطلب/نظر) در اینصورت، می‌توان بخش متغیر را به صورت یک js بدون کش لود کرد و بقیه صفحه را کش کرد که این کار سرعت بارگذاری صفحه را تا حد محسوسی بالا می‌برد.

نویسنده : amin mah
تاریخ ارسال : سه شنبه ، 94/04/02 ، در ساعت 01:44

نظرات برای همه چیز درباره کش(cache) سمت سرور و کاربر

نام و نام خانوادگی شما *
آدرس ایمیل شما
آدرس وب شما
متن نظر *