Accueil > PHP > Yii Framework – Une extension pour la mise en cache des data providers (et plus encore…)

Yii Framework – Une extension pour la mise en cache des data providers (et plus encore…)

Yii Framework

De retour avec une petite extension pour Yii Framework concoctée par votre serviteur.

Yii 1.1 a introduit un certain nombre de classes assez pratiques dont une classe reprenant le concept de data provider pour les active record : CActiveDataProvider.

Cette classe est intensivement utilisée par certains widgets dont CGridView en particulier.

Par ailleurs, Yii 1.1.7 permet désormais de gérer la mise en cache aisée des requêtes des Active Record permettant des gains de performance et un soulagement de la base de données. Malheureusement,  CActiveDataProvider n’a pas été adaptée pour tirer partie de cette possibilité. Qui plus est, cette classe comporte un bug assez embêtant : dès lors que votre Active Record utilise des critères ‘having’ et/ou ‘group’, le nombre d’éléments résultants calculés par le data provider n’en tient pas compte (produisant des effets indésirables, notamment sur les paginateurs qui affichent un nombre de pages incohérent).

En attendant d’éventuelles évolutions et corrections natives, vous pouvez utiliser mon extension EActiveDataProviderEx afin de pouvoir bénéficier du cache et de la correction du compte du nombre d’éléments à télécharger sur le site officiel de Yii Framework.


Configuration requise

Yii Framework 1.1.7 ou supérieur

Installation

Extraire le fichier dans protected/components
Assurez-vous d’importer le composant en utilisant le paramètre import du fichier de configuration

Utilisation

Utilisez EActiveDataProviderEx de la même manière que CActiveDataPrivider.
En plus, vous pouvez spécifier une propriété cache sous la forme d’un tableau de deux paramètres : array($cache_duration, $cache_dependency)
$cache_duration est la durée du cache exprimé en secondes
$cache_dependency est une objet CCacheDependency optionnel

Exemple

1
2
3
4
5
6
7
8
9
$criteria=new CDbCriteria;
// add some criteria here
$dependency = new CDbCacheDependency('SELECT MAX(UNIX_TIMESTAMP(`modified`)) FROM yourModelTable'); // Optional
$activeDataProviderEx = new EActiveDataProviderEx(yourModel, array(
     'criteria'=>$criteria,
     'pagination' => array('pageSize' => 30),
     'sort' => array('defaultOrder' => '`t`.`name`'),
     'cache' => array(3600, $dependency)
));
Vous avez aimé cet article ? Partagez-le :
Categories: PHP Tags: , ,
  1. Pas encore de commentaire
  1. Pas encore de trackbacks

Performance Optimization WordPress Plugins by W3 EDGE

Switch to our mobile site