يكی ديگر از گزينه ها ، cache صفحه در سمت سرويس گيرنده است . در اين روش ، مرورگر نسخه ای از صفحه را ذخيره و بطور اتوماتيك از آن در مواردی كه دكمه back مرورگر كليك و يا آدرس URL صفحه مجددا” تايپ شود، استفاده می نمايد . در صورتی كه كاربر دكمه Refresh را فعال نمايد ، از نسخه cache شده صرفنظر  و صفحه مجددا” از سرويس دهنده درخواست می گردد .
برای cache يك صفحه در سمت سرويس گيرنده از خصلت Location در دايركتيو OutputCache  استفاده می گردد . مقدار پيش فرض اين خصلت server است و می تواند مقادير ديگر نظير Client ، None و Any را به آن نسبت داد .

 <%@ OutputCache Duration=”20″ VaryByParam=”None” Location=”Client” %>

استفاده از caching سمت سرويس گيرنده بمراتب كمتر از caching سمت سرويس دهنده است چراكه صفحه همچنان برای هر كاربر خاص مجددا” ايجاد خواهد شد . در روش فوق ، شاهد كاهش مدت زمان اجراء كد و يا دستيابی به بانك اطلاعاتی در جهت بهبود كارآئی برنامه نخواهيم بود . از روش caching سمت سرويس گيرنده در موارد خاصی نظير زمانی كه صفحه cache شده حاوی داده سفارشی و مختص به يك كاربر است ، استفاده می گردد .
در صورتی كه هر كاربر در يك session مجزاء فعاليت می نمايد ، صفحه يك مرتبه ايجاد و تمامی سرويس گيرندگان از آن استفاده خواهند كرد . در چنين وضعيتی ممكن است عملكرد يك صفحه با مشكل مواجه گردد ( نظير نمايش يك پيام  خوش آمدگوئی به كاربر و بر اساس نام آن ) . در مقابل ، می توان از fragment caching برای caching بخش هائی خاص از صفحه و يا caching سمت سرويس گيرنده به منظور ذخيره نسخه مختص يك كاربر بر روی كامپيوتر هر يك از سرويس گيرندگان استفاده نمود.

Caching و Query string
يكی از نكات مهم در خصوص caching ، تصميم در خصوص زمان استفاده مجدد از صفحه و صحت اطلاعات است . اغلب پياده كنندگان تمايل زيادی در ارائه اطلاعات به صورت بلادرنگ دارند و كمتر در انديشه استفاده بهينه از سيستم caching می باشند . پياده كنندگان می توانند بدون نگرانی در موارد متعددی از caching استفاده نمايند تا كارآئی برنامه های  وب را افزايش دهند .
در مواردی كه اطلاعات به صورت پويا توليد می گردد وضعيت caching و يا استراتژی ايجاد و بكارگيری مجدد آن تا اندازه ای متفاوت خواهد بود . به عنوان نمونه ، در صورتی كه در صفحه ای از session كاربر جاری استفاده می شود تا بر اساس آن رابط كاربر سازماندهی گردد ، caching تمام صفحه مناسب نخواهد بود چراكه يك صفحه مشابه نمی تواند برای ساير كاربران مفيد و قابل استفاده مجدد باشد . يك نمونه ديگر ، صفحه ای است كه اطلاعات دريافتی خود را از يك صفحه ديگر و از طريق query string دريافت می نمايد . در چنين مواردی صفحه به صورت پويا ايجاد و برای  caching آن می بايست از راهكارهائی ديگر استفاده گردد.
در مثال اشاره شده در بخش چهارم  به خصلت VaryByParam دايركتيو OutputCache ، مقدار None نسبت داده شده بود . بدين ترتيب به ASP. NET اعلام شده است كه صرفا” يك نسخه از صفحه را  cache نمايد تا بتوان از آن در تمامی حالات استفاده مجدد نمود . در چنين مواردی اگر درخواست صفحه به همراه اضافه كردن آرگومان های query string به URL باشد ، صرفا” از همان يك نسخه cache شده بدون توجه به مقدار آرگومان های دريافتی استفاده می گردد ( تا زمانی كه تاريخ مصرف نسخه cache شده به اتمام نرسيده باشد ) .  شما می توانيد اين موضوع را با اضافه كردن يك آرگومان query string بطور دستی در مرورگر انجام دهيد . مثلا” سعی كنيد صفحه  را با افزودن  a=b ?  در انتهای URL اجراء نمائيد. مشاهده خواهيد كرد كه خروجی cache شده همچنان يكسان خواهد بود .
با توجه به نتايج فوق ممكن است اينگونه برداشت شود كه output caching برای صفحه ای كه از آرگومان های query string استفاده می نمايد ، مناسب نباشد . در اين رابطه ASP.NET يك راه حل ديگر را ارائه نموده است . در چنين مواردی می توان خصلت VaryByParam را “*” در نظر گرفت تا مشخص گردد كه صفحه از query string استفاده می نمايد و به ASP.NET اعلام گردد كه نسخه های cache مجزاء را برای مقادير مختلف آرگومان query string ذخيره نمايد .

 <%@ OutputCache Duration=”20″ VaryByParam=”*” %>

بدين ترتيب زمانی كه صفحه به همراه اطلاعات query string  درخواست شود ، در ابتدا ASP.NET مقدار query string را بررسی می نمايد . در صورتی كه رشته دريافتی با درخواست قبلی مطابقت نمايد و يك نسخه cache شده از صفحه موجود باشد ، از آن استفاده خواهد كرد . در غير اينصورت يك نسخه جديد از صفحه ايجاد و بطور جداگانه cache می گردد .
برای آشنائی بهتر با نحوه عملكرد فرآيند فوق ، فرض كنيد مجموعه ای از درخواست ها به ترتيب زير دريافت گردد:

  • كاربری صفحه ای را بدون پارامتر query string درخواست و نسخه A صفحه را دريافت می نمايد .
  • كاربری صفحه را با پارامتر ProductID=1 درخواست و نسخه B صفحه را دريافت می نمايد .
  • كاربر ديگر صفحه را با پارامتر ProductID=2 درخواست و نسخه C صفحه را دريافت می نمايد .
  • كاربر ديگر صفحه را با پارامتر ProductID=1 درخواست می نمايد . در صورتی كه تاريخ اعتبار نسخه B كه قبلا” cache شده است به اتمام نرسيده باشد ، اين نسخه برای وی ارسال می گردد.
  • كاربر ديگر صفحه را بدون پارامتر درخواست می نمايد .  در صورتی كه تاريخ اعتبار نسخه A كه قبلا” cache شده است به اتمام نرسيده باشد ، اين نسخه برای وی ارسال می گردد.

برای تست فوق و دريافت نتايج بهتر می توان مدت زمان اعتبار نسخه cache شده را زياد كرد .
در صورتی كه صفحه ای صرفا” در ارتباط با داده سمت سرويس دهنده  ( نظير داده موجود در يك بانك اطلاعاتی )  و يا داده موجود در query string باشد ،‌ بدون نگرانی می توان از روش output caching استفاده كرد .
در صورتی كه خروجی صفحه وابسته به اطلاعات خاص و مرتبط با كاربر نظير داده session و يا كوكی باشد ، از روش output caching نمی توان استفاده نمود چراكه مكانيزمی وجود ندارد كه بر اساس آن بتوان تفاوت caching را بر اساس session و يا كوكی تشخيص داد. output caching همچنين با صفحات پويائی كه محتويات خود را در پاسخ به رويدادهای مرتبط با كنترل ها تغيير می دهند كار نمی كند . در چنين مواردی ، می توان از fragment caching برای caching يك بخش خاص از صفحه و يا از data caching برای caching اطلاعات خاص استفاده كرد.

caching با پارامترهائی خاص
بندرت مقدار  VaryByParam معادل  “*” در نظر گرفته می شود و در اكثر موارد بهتر است كه يك متغير query string مهم را با نام مشخص كرد . كد زير نحوه انجام اين كار را نشان می دهد.

 <%@ OutputCache Duration=”20″ VaryByParam=”ProductID” %>

در چنين مواردی ، ASP.NET مقدار query string را بررسی و به دنبال پارامتر ProductID می گردد . درخواست هائی با پارامترهای مختلف ProductID بطور جداگانه cache  و از ساير پارامترها صرفنظر خواهد شد .
در صورت لزوم می توان چندين پارامتر را كه توسط semicolon از يكديگر جدا شده اند به خصلت VaryByParam نسبت داد . كد زير نحوه انجام اين كار را نشان می دهد .

 <%@ OutputCache Duration=”20″ VaryByParam=”ProductID;CurrencyType” %>

در چنين مواردی ، ASP.NET نسخه هائی جداگانه از صفحه را با توجه به مقادير متفاوت ارائه شده توسط ProductID و CurrencyType در  cache نگهداری خواهد كرد .

دسته بندی : افزایش درآمد سایت