Yii2: Mengenal Fragment Caching Data dengan Dependency dan Parameters

Cache itu intinya menyimpan sesuatu (content, query dsb) ke sebuah penampung (bisa memory, file dsb). Sehingga jika sesuatu tersebut dibutuhkan lagi, ya tiggal ngambil dari penampung jadi gak usah proses lagi.. so relatif akan mempercepat jika data kita dah banyak.

Cukuplah Anda baca2 dari sini https://github.com/yiisoft/yii2/blob/master/docs/guide/caching-fragment.md, namun saya akan mencoba membuatnya lebih nyata… halah..

Kasusnya, saya ingin meng-cache Gridview yang memproses resume dari puluhan ribuan data, maka caranya gampang.. kita cukup membungkus Gridview dengan block cache..

<?php
if ($this->beginCache('log-cache')) {
	?>
	<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'showHeader'=> true,
        'columns' => $grid_columns,
    ]); ?>
	<?php
	$this->endCache();
}
?>

Selesai.. namun hasilnya data kita akan menjadi statis :).. ketika ada perubahan sumberdata maka Gridview tetep akan menampilkan data lama dari cache. Nah disini memungkinkan kita memaksa cache mengambil data baru ketika suatu kondisi atau parameter terpenuhi..

Yii2 menyediakan hal ini melalui:

1. Dependency
Force reload cache berdasarkan hasil query tertentu

<?php
$dependency = [
    'class' => 'yii\caching\DbDependency',
    'sql' => "SELECT synchronize_time FROM synchronize WHERE table_name='log' ",
];
if ($this->beginCache('log-cache', ['dependency' => $dependency])) {

	// GRIDVIEW	

	$this->endCache();
}
?>

Artinya ketika query tersebut menghasilkan data yang berbeda maka cache akan mereload data baru

2. Variations
Force reload cache berdasarkan parameter tertentu

<?php
$variabelA = 'xxx'; //bisa dari URL atau darai manapun, bahkan dari database
$variabelB = 'yyy'; //bisa dari URL atau darai manapun, bahkan dari database

$dependency = [
    'class' => 'yii\caching\DbDependency',
    'sql' => "SELECT synchronize_time FROM synchronize WHERE table_name='log' ",
];
if ($this->beginCache('log-cache', ['dependency' => $dependency, 'variations' => [$variabelA,$variabelB]])) {

	// GRIDVIEW	

	$this->endCache();
}
?>

3. Toggling Caching
Force reload cache berdasarkan parameter tertentu juga.. modelnya on off, sebenarnya sama aja dengan poin 2.. Yii2 aneh..

<?php
$status = true; // Bisa dari url

$variabelA = 'xxx'; //bisa dari URL atau darai manapun, bahkan dari database
$variabelB = 'yyy'; //bisa dari URL atau darai manapun, bahkan dari database

$dependency = [
    'class' => 'yii\caching\DbDependency',
    'sql' => "SELECT synchronize_time FROM synchronize WHERE table_name='log' ",
];
if ($this->beginCache('log-cache', ['dependency' => $dependency, 'variations' => [$variabelA,$variabelB], 'enabled'=>$status])) {

	// GRIDVIEW	

	$this->endCache();
}
?>
Tags:,

Leave a Reply

Your email address will not be published. Required fields are marked *