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

caching در فریمورک Yii


Caching یا ذخیره سازی، یک راه موثر برای بهبود عملکرد برنامه شما است. مکانیزم Caching، داده های static را در حافظه پنهان یا cache ذخیره می کند و زمانی که درخواست می شوند، آنها را از cache می گیرد. در سمت server  ، شما می توانید از cache برای ذخیره داده های اولیه، مانند یک لیست از آخرین اخبار استفاده کنید. همچنین می توانید قسمتی از صفحه یا کل صفحات وب را ذخیره کنید. در سمت سرویس گیرنده یا client، شما می توانید از  طریق HTTP caching ، صفحاتی را که اخیراً بازدید شده، در cache مرورگر نگهداری کنید.

آماده سازی DB

مرحله 1 - ایجاد یک پایگاه داده جدید: پایگاه داده را می توان به دو روش زیر ایجاد نمود:

  • در ترمینال، دستور زیر را اجرا نمایید.
mysql -u root –p
  • ایجاد یک پایگاه داده جدید از طریق دستورزیر:
  CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci؛

مرحله 2 - connection پایگاه داده را در فایل config/db.php پیکربندی کنید. تنظیمات زیر برای سیستم مورد استفاده کنونی می باشد.

<?php
   return [
      'class' => 'yii\db\Connection',
      'dsn' => 'mysql:host=localhost;dbname=helloworld',
      'username' => 'vladimir',
      'password' => '12345',
      'charset' => 'utf8',
   ];
?>

مرحله 3 - داخل دایرکتوری ریشه، دستور زیر را اجرا کنید. این فرمان یک database migration را برای مدیریت DB ایجاد می کند. فایل migration باید در پوشه  migrations در ریشه پروژه قرار بگیرد.

./yii migrate/create test_table

مرحله 4 - فایل migration را (m160106_163154_test_table.php در مثال ما) به صورت زیر ویرایش کنید.

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160106_163154_test_table extends Migration {
      public function safeUp()\ {
         $this->createTable("user", [
            "id" => Schema::TYPE_PK,
            "name" => Schema::TYPE_STRING,
            "email" => Schema::TYPE_STRING,
         ]);
         $this->batchInsert("user", ["name", "email"], [
            ["User1", "user1@gmail.com"],
            ["User2", "user2@gmail.com"],
            ["User3", "user3@gmail.com"],
            ["User4", "user4@gmail.com"],
            ["User5", "user5@gmail.com"],
            ["User6", "user6@gmail.com"],
            ["User7", "user7@gmail.com"],
            ["User8", "user8@gmail.com"],
            ["User9", "user9@gmail.com"],
            ["User10", "user10@gmail.com"],
            ["User11", "user11@gmail.com"],
         ]);
      }
      public function safeDown() {
         $this->dropTable('user');
      }
   }
?>

migration بالا یک جدول به نام user  با چنین فیلدهایی ایجاد می کند: id, name, email. همچنین تعدادی user نیز به جدول مان اضافه می نماید.

مرحله 5 - داخل ریشه پروژه دستور زیر را اجرا کنید. تا migraton به Database مان اعمال شود.

./yii migrate

مرحله 6 - حالا ما باید یک مدل برای جدول user مان ایجاد کنیم. برای سادگی کار، ما قصد داریم از ابزار تولید کد Gii استفاده کنیم.

این آدرس را باز کنید: url: http://localhost:8080/index.php?r=gii. سپس بر روی دکمه “Start” زیر هدر “Model generator” کلیک کنید. نام جدول را user و نام کلاسِ مدل را MyUser بگذارید، روی دکمه “Preview” کلیک کنید و در نهایت روی دکمه “Generate” کلیک نمایید.

مدل MyUser باید در دایرکتوری models  ظاهر شود.

Data Caching

Data caching به ذخیره سازی متغیرهای PHP در cache و بازیابی آنها کمک می کند. Data caching به کامپوننت های cache وابسته است که معمولا به عنوان کامپوننت های برنامه ثبت می شوند. برای دسترسی به کامپوننت های برنامه، می توانید Yii::$app cache را فراخوانی کنید. شما می توانید چندین کامپوننت cache را ثبت کنید.

Yii از مخازن ذخیره سازی زیر پشتیبانی می کند :

  • yii \ caching \ DbCache - از یک جدول پایگاه داده برای ذخیره اطلاعات cache شده استفاده می کند. بدین منظور باید یک جدول با عنوان مشخص ، در yii\caching\DbCache::$cacheTable ایجاد کنید.
  • yii\caching\ApcCache - از  افزونه PHP APC استفاده می کند.
  • yii \ caching \ FileCache - از فایل ها برای ذخیره اطلاعات cache شده استفاده می کند.
  • yii \ caching \ DummyCache – برای زمانی که هیچ cache واقعی ای وجود ندارد یک cache placeholder ایجاد می کند. هدف از این component ساده کردن کدهایی است که نیاز دارند تا cache از لحاظ دسترس پذیری چک شود.
  • yii \ caching \ MemCache – از افزونه PHP memcache استفاده می کند.
  • yii \ caching \ WinCache – از افزونه PHP WinCache استفاده می کند.
  • yii \ redis \ Cache - یک cache component برمبنای دیتابیس Redis پیاده سازی می کند.
  • yii \ caching \ XCache – از افزونه PHP Xcache استفاده می کند.

تمام cache component ها از API های زیر پشتیبانی می کنند:

  • get()  - یک data value از cache را با یک کلید مشخص شده ، باز می گرداند. اگر data value منقضی شده یا نامعتبر یا پیدا نشده باشد مقدار False را برمی گرداند.
  • add()  - یک data value را به وسیله ی کلید در Cache شناسایی می کند و اگر آن کلید در Cache وجود نداشته باشد آن را ذخیره می کند.
  • set()  - یک data value را که توسط کلید در Cache شناسایی شده است را ذخیره می کند.
  • multiGet()  - این دستور data value های متعدد را از Cache با کلیدهای مشخص شده بازیابی می کند.
  • multiAdd()  - این دستور data value های متعدد را در Cache ذخیره می کند. هر آیتم با یک کلید شناسایی می شود. اگر کلید در Cache وجود داشته باشد، data value حذف خواهد شد.
  • multiSet() - این دستور data value های متعدد را در Cache ذخیره می کند. هر آیتم با یک کلید شناسایی می شود.
  • exists() – با برگرداندن یک مقدار خاصی نشان می دهد که کلید تعیین شده در cache وجود دارد یا ندارد.
  • flush() - همه data value ها را از Cache حذف می کند.
  • delete() - این دستور data value ی که توسط یک کلید در cache شناسایی می شود را حذف می کند.

یک data value که در cache ذخیره می شود برای همیشه باقی می ماند مگر اینکه حذف شود. برای تغییر این رفتار، می توانید هنگامی که متد set() برای ذخیره ی یک data value فراخوانی می شود، یک پارامتر انقضا تنظیم کنید.

data value های cache شده، می توانند با تغییرات cache dependency ها، نامعتبر شوند.

Dependency یا وابستگی ها

  • yii \ caching \ DbDependency –اگر نتیجه یquery  حاصل از یک دستور SQL تغییر کند، dependency تغییر می کند.
  • yii \ caching \ ChainedDependency - اگر هر کدام از dependency های زنجیره تغییر کنند، dependency تغییر می کند.
  • yii \ caching \ FileDependency - اگر زمانِ آخرین ویرایش فایل تغییر کند، dependency تغییر می کند.
  • yii \ caching \ ExpressionDependency - اگر نتیجه ی یک عبارت مشخص شده ی PHP تغییر کند، dependency تغییر می کند.

حال، کامپوننت Cache را به برنامه خود اضافه کنید.

مرحله 1 - فایل config/web.php را تغییر دهید.

<?php
   $params = require(__DIR__ . '/params.php');
   $config = [
      'id' => 'basic',
      'basePath' => dirname(__DIR__),
      'bootstrap' => ['log'],
      'components' => [
         'request' => [
            // !!! insert a secret key in the following (if it is empty) - this
               //is required by cookie validation
            'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO',
         ],
         'cache' => [
            'class' => 'yii\caching\FileCache',
         ],
         'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
         ],
         'errorHandler' => [
            'errorAction' => 'site/error',
         ],
         'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
         ],
         'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
               [
                  'class' => 'yii\log\FileTarget',
                  'levels' => ['error', 'warning'],
               ],
            ],
         ],
         'db' => require(__DIR__ . '/db.php'),
      ],
      'modules' => [
         'hello' => [
            'class' => 'app\modules\hello\Hello',
         ],
      ],
      'params' => $params,
   ];
   if (YII_ENV_DEV) {
      // configuration adjustments for 'dev' environment
      $config['bootstrap'][] = 'debug';
      $config['modules']['debug'] = [
         'class' => 'yii\debug\Module',
      ];
      $config['bootstrap'][] = 'gii';
      $config['modules']['gii'] = [
         'class' => 'yii\gii\Module',
      ];
   }
   return $config;
?>

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

public function actionTestCache() {
   $cache = Yii::$app->cache;
   // try retrieving $data from cache
   $data = $cache->get("my_cached_data");
   if ($data === false) {
      // $data is not found in cache, calculate it from scratch
      $data = date("d.m.Y H:i:s");
      // store $data in cache so that it can be retrieved next time
      $cache->set("my_cached_data", $data, 30);
   }
   // $data is available here
   var_dump($data);
}

مرحله 3 – در نوار آدرسبار مرورگر وب تان، آدرس http://localhost:8080/index.php?r=site/test-cache را تایپ کنید. آنچه که مشاهده می کنید مطابق با تصویر زیر می باشد.

مرحله 4 - اگر صفحه را بارگیری مجدد کنید(reload)، متوجه می شوید که تاریخ تغییری نکرده است. مقدار تاریخ cache شده است و cache ظرف 30 ثانیه منقضی می شود. صفحه بعد از 30 ثانیه بارگیری شود.

ذخیره کردن query (query caching)

Query caching به شما این امکان را می دهد تا نتیجه ی query های پایگاه داده را ذخیره کنید. Query caching به یک DB connection و یک کامپوننت cache نیاز دارد.

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

public function actionQueryCaching() {
   $duration = 10;
   $result = MyUser::getDb()->cache(function ($db) {
      return MyUser::find()->count();
   }, $duration);
   var_dump($result);
   $user = new MyUser();
   $user->name = "cached user name";
   $user->email = "cacheduseremail@gmail.com";
   $user->save();
   echo "==========";
   var_dump(MyUser::find()->count());
}

در کد بالا، یک query از پایگاه داده را Cache می کنیم، یک user جدید اضافه می کنیم و تعداد کاربران را نمایش می دهیم.

مرحله 2 – در مرورگر وب تان به آدرسhttp://localhost:8080/index.php?r=site/query-caching  بروید و صفحه را دوباره بارگذاری کنید.

هنگامی که صفحه را برای اولین بار باز می کنیم، query دیتابیس را cache می کنیم و تمام کاربران را شمارش می کنیم. وقتی صفحه را دوباره بارگذاری می کنیم، نتیجه ی query  های cache شده ی پایگاه داده مشابه قبل است، زیرا query های پایگاه داده ذخیره شده اند.

شما می توانید cache را از console با استفاده از دستورات زیر حذف نمایید :

  • yii cache – تمام کامپوننت های cache موجود رانشان می دهد.
  • yii cache / flush cache1 cache2 cache3 – کامپوننت های کش cache1، cache2 و cache3 را حذف می کند.
  • yii cache / flush-all - تمام کامپوننت های cache را حذف می کند.

مرحله 3 - وارد ریشه پروژه شوید و این فرمان را اجرا کنید:

./yii cache/flush-all

 

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

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

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

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

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

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

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

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

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