Joomla! Programmierung/Framework/JFactory/getCache

Aus Joomla! Dokumentation
Wechseln zu: Navigation, Suche

JFactory/getCache Liefert eine Referenz zu dem globalen JCache Objekt. Wird nur neu erstellt, wenn es noch nicht existiert.

Inhaltsverzeichnis

[Bearbeiten] Syntax

static getCache( [$group], [$handler], [$storage] )
  • @return object JCache
  • @since Joomla 1.5
Parameter Datentyp Beschreibung Standardwert
$group string Name der Cache Gruppe. Erlaubt verschiedene Caches zu erstellen, die einer eindeutigen Gruppe zugewiesen werden.
$handler string Typ des Caches. Joomla! unterstützt aktuell vier Typen: "callback", "output", "page" und "view". Siehe JCache für weitere Informationen. 'callback'
$storage string Die Speichermethode des Caches. Joomla! unterstützt aktuell fünf Methoden: "apc", "eaccelerator", "file", "memcache" und "xcache". Siehe JCache für weitere Informationen. null

[Bearbeiten] Beispiele

[Bearbeiten] Methode cachen

In diesem Beispiel wird ein einfacher "Callback Cache" implementiert. Dieser cached das Ergebnis von "teureMethode" so dass das Ergebnis für eine gegebene Anzahl an Parametern nur einmal errechnet wird. Siehe JCache für weitere Informationen.

// Definiere eine Klasse die die rechenintensiv Methode enthält.
class teuresKlasse {
 
  function teureMethode () {
 
    // JDatabase Instanz laden
    $db = JFactory::getDBO();
 
    // Den selben query 250 mal ausführen
    for ($i=0; $i<250; $i++) {
      $db->setQuery( 'SELECT * FROM #__content' );
      $rows = $db->loadObjectList();
    }
 
    // Ergebnis ausgeben.
    return $rows;
 
  }
 
}
 
// Cache Instanz laden.
$cache = JFactory::getCache( 'meinCache' );
 
/**
 * Zähler initialisieren {@see JProfiler}
 */
$profiler = new JProfiler();
 
// Methode ohne Cache aufrufen
$rows = teuresKlasse::teureMethode();
 
// Benötigte Zeit ausgeben
echo $profiler->mark( ' ohne Cache' );
 
/**
 * Zähler initialisieren {@see JProfiler}
 */
$profiler = new JProfiler();
 
// Methode mit Cache aufrufen
$rows  = $cache->call( array( 'teuresKlasse', 'teureMethode' ) );
 
// Benötigte Zeit ausgeben
echo $profiler->mark( ' mit Cache' );

Nun den Code einmal ausführen. Das erste mal wird ein ähnliches Ergebnis wie dieses hier erscheinen:

2.093 ohne Cache
2.160 mit Cache

Der zweite Wert ist ein bisschen langsamer, weil der Cache in eine Datei geschrieben werden muss. Wenn Sie nun ein zweites mal den Code ausführen, sollten die Werte in etwa so lauten:

2.073 ohne Cache
0.008 mit Cache

Der Cache hat die Seite merklich beschleunigt.

[Bearbeiten] Siehe auch

[Bearbeiten] Danksagung

Das Beispiel wurde im original von Mathias (mjaz) erstellt.

[Bearbeiten] Quellcode

Joomla 11.1 JFactory::getCache()

Folder blue.png libraries/joomla

  • File php.png factory.php
  1. public static function getCache($group = '', $handler = 'callback', $storage = null)
  2. {
  3. $hash = md5($group.$handler.$storage);
  4. if (isset(self::$cache[$hash])) {
  5. return self::$cache[$hash];
  6. }
  7. $handler = ($handler == 'function') ? 'callback' : $handler;
  8.  
  9. $conf = self::getConfig();
  10.  
  11. $options = array('defaultgroup' => $group );
  12.  
  13. if (isset($storage)) {
  14. $options['storage'] = $storage;
  15. }
  16.  
  17. jimport('joomla.cache.cache');
  18.  
  19. $cache = JCache::getInstance($handler, $options);
  20.  
  21. self::$cache[$hash] = $cache;
  22.  
  23. return self::$cache[$hash];
  24. }
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Sonstiges
Team Navigation
Werkzeuge