مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

Fragment Caching در فریمورک Yii


Fragment caching امکان ذخیره ی قسمتی از یک صفحه وب را برای شما فراهم کرده است.

مرحله 1 - یک تابع جدید به نام  actionFragmentCaching()را به SiteController اضافه کنید.

public function actionFragmentCaching() {
   $user = new MyUser();
   $user->name = "cached user name";
   $user->email = "cacheduseremail@gmail.com";
   $user->save();
   $models = MyUser::find()->all();
   return $this->render('cachedview', ['models' => $models]);
}

در کد بالا، یک user جدید ایجاد نمودیم و یک فایل view به نام cachedview را نمایش دادیم.

مرحله 2 - حالا یک فایل جدید به نام cachedview.php  در پوشه views/site ایجاد کنید.

<?php if ($this->beginCache('cachedview')) { ?>
   <?php foreach ($models as $model): ?>
      <?= $model->id; ?>
      <?= $model->name; ?>
      <?= $model->email; ?>
      <br/>
   <?php endforeach; ?>
<?php $this->endCache(); } ?>
<?php echo "Count:", \app\models\MyUser::find()->count(); ?>

به وسیله ی دستوراتِ بین دو متد beginCache() و endCache() اقدام به تولید محتوا یا content برای صفحه نمودیم. اگر این محتوا در cache یافت شود، متدbeginCache()   آن را render می کند.

مرحله 3 – در مرورگر وب تان به آدرس http://localhost:8080/index.php?r=site/fragment-caching بروید و صفحه رامجدداً بارگذاری کنید. آنچه که به عنوان خروجی مشاهده خواهید کرد مطابق با تصویر زیر می باشد.

توجه کنید که محتوای صفحه بین متدهای beginCache() و endCache() کش شده است. همانطور که مشاهده می کنید ما در پایگاه داده 13 کاربر داریم ولی فقط 12 تا از آنها نمایش داده شده است.

Page Caching

Page caching، کل محتویات یک صفحه وب را به طور کامل cache می کند. Page caching توسط yii\filter\PageCache پشتیبانی می شود.

مرحله 1 – تابع behaviors() در SiteController را مطابق با کد زیر ویرایش کنید.

public function behaviors() {
   return [
      'access' => [
         'class' => AccessControl::className(),
         'only' => ['logout'],
         'rules' => [
            [
               'actions' => ['logout'],
               'allow' => true,
               'roles' => ['@'],
            ],
         ],
      ],
      'verbs' => [
         'class' => VerbFilter::className(),
         'actions' => [
            'logout' => ['post'],
         ],
      ],
      [
         'class' => 'yii\filters\PageCache',
         'only' => ['index'],
         'duration' => 60
      ],
   ];
}

کد بالا صفحه index را به مدت 60 ثانیه cache می کند.

مرحله 2 - به آدرس http://localhost:8080/index.php?r=site/index بروید. سپس پیامِ congratulation فایلِ  index viewرا ویرایش کنید. اگر صفحه را دوباره بارگذاری کنید، همانطور که مشاهده می کنید هیچ تغییری صورت نگرفته، زیرا صفحه cache شده است. یک دقیقه صبر کنید و صفحه را دوباره بارگذاری کنید.

HTTP Caching

برنامه های کاربردی وب می توانند از cache سمت مشتری (client-side caching) استفاده کنند. برای استفاده از آن، می توانید فیلتر yii\filter\HttpCache  را برای action های conrtoller پیکربندی کنید.

هدر Last-Modified از یک timestamp استفاده می کند تا نشان دهد که صفحه تغییر کرده است.

مرحله 1 - برای فعال کردن ارسال هدر Last-Modified، پروپرتی yii\filter\HttpCache::$lastModified را پیکربندی کنید.

public function behaviors() {
   return [
      [
         'class' => 'yii\filters\HttpCache',
         'only' => ['index'],
         'lastModified' => function ($action, $params) {
            $q = new \yii\db\Query();
            return $q->from('news')->max('created_at');
         },
      ],
   ];
}

در کد بالا، ما تنها HTTP caching را برای اکشن index فعال کردیم. هنگامی که یک مرورگر، صفحه index را برای اولین بار باز می کند، صفحه در سمت سرور تولید می شود و به مرورگر ارسال می شود. برای بار دوم، اگر هیچ خبری ایجاد نشود، سرور، صفحه را دوباره تولید نخواهد کرد.

هدر Etag یک hash مهیا کرده است که محتوای صفحه را نشان می دهد. اگر صفحه تغییر کند، hash نیز تغییر خواهد کرد.

مرحله 2 - برای فعال کردن ارسال هدر Etag، پروپرتی yii\filters\HttpCache::$etagSeed  را پیکربندی کنید.

public function behaviors() {
   return [
      [
         'class' => 'yii\filters\HttpCache',
         'only' => ['index'],
         'etagSeed' => function ($action, $params) {
            $user = $this->findModel(\Yii::$app->request->get('id'));
            return serialize([$user->name, $user->email]);
         },
      ],
   ];
}

در کد بالا، ما فقط HTTP caching را برای اکشن index فعال کردیم که باید هدر Etag HTTP را براساس نام و ایمیل کاربر ایجاد کند. هنگامی که یک مرورگر صفحه index را برای اولین بار باز می کند، صفحه در سمت سرور تولید می شود و به مرورگر ارسال می شود. برای بار دوم، اگر تغییری در نام یا ایمیل وجود نداشته باشد، سرور صفحه را دوباره تولید نخواهد کرد.

فصلِ: 14 , تعداد قسمت ها: 188 , سطح: صفر تا صد

این فصل در یک نگاه:

سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…
فصلِ: 8 , تعداد قسمت ها: 77 , سطح: صفر تا صد

این فصل در یک نگاه:

  پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید