phpFlickr erweitert – Dynamischer Cache

Auf fast allen meinen Seiten setze ich bisher das PHP-Framework phpFlickr ein. Leider bietet es nicht alle Funktionalitäten die von mir genutzt werden. Um den bestehenden Code nicht verändern zu müssen habe ich also auf Vererbung zurückgegriffen und einige Methoden einfach überschrieben. Insbesondere im Bezug auf Caching habe ich einiges geändert.

Folgendes habe ich verändert:

  • Man kann angeben für welche Art von Requests der Cache nicht genutzt werden soll (um immer aktuell zu bleiben).
  • Man kann für verschiedene Methodenaufrufe die Ablaufzeit vom Cache angeben.
  • Es ist möglich eine Übersicht aller ausgeführten Request zu bekommen (inkl. Zeitbeanspruchung) – gerade für die Optimierung ist das sehr hilfreich.

Hier die Klasse:


define("MYFLICKR_ONEDAY_CACHE_EXP", 86400);

if (class_exists('phpFlickr')) {
	
	class myFlickr extends phpFlickr {
		/*
			The following request types shouldn't be cached
		*/
		var $dontcacherequests = array(
			'flickr.photos.comments.getList',
			'flickr.contacts.getList',
			'flickr.favorites.getList'
		);
		
		var $changedCacheTimes = array (
			'flickr.photos.getInfo' => MYFLICKR_ONEDAY_CACHE_EXP,
			'flickr.people.findByUsername' => MYFLICKR_ONEDAY_CACHE_EXP,
			'flickr.people.getPublicPhotos' => 7200,
			'flickr.urls.getUserPhotos' => MYFLICKR_ONEDAY_CACHE_EXP
		);
		
		/*
			This array will hold statistics about the different request types
		*/
		var $requestStatistics = array();
		
		/*
			This array holds time statistics for each query
		*/
		var $requestTimeStatistics = array();
		
		/*
			This variable holds the total time which has been taken by the several requests
		*/
		var $totalRequestTime = 0;
		
		/*
			
		*/
		var $default_cache_expiration = 600;
		
		/*
			Constructor will call base class
		*/
		function __construct($api_key, $secret = NULL, $die_on_error = false) {
			parent::__construct($api_key, $secret, $die_on_error);
		}
		
		/*
			Overwritten
		*/
		function enableCache($type, $connection) {
			parent::enableCache($type, $connection, MYFLICKR_ONEDAY_CACHE_EXP * 2); // Default cache expiration
		}
		
		/*
			Overwritten
		*/
		function getCached($request) {
			if (!isset($this->requestStatistics[$request['method']])) {
				$this->requestStatistics[$request['method']] = 1;
			}
			else {
				$this->requestStatistics[$request['method']] += 1;
			}
			
			if (in_array($request['method'], $this->dontcacherequests)) {
				return false;
			}
			else {
				
				// Overwrite cache time
				if (array_key_exists($request['method'], $this->changedCacheTimes)) {
					$this->cache_expire = $this->changedCacheTimes[$request['method']];
				}
				else {
					$this->cache_expire = $this->default_cache_expiration;
				}
				
				return parent::getCached($request);
			}
		}
		
		/*
			Overwritten
		*/
		function request($command, $args = array(), $nocache = false) {
			$startTime = microtime(true);
			
			$result = parent::request($command, $args, $nocache);
			
			$requiredTime = microtime(true) - $startTime;
			$this->totalRequestTime += $requiredTime;
			array_push($this->requestTimeStatistics, array($command, $requiredTime));
			
			return $result;
		}
		
		function getRequestStatistics() {
			return $this->requestStatistics;
		}
		
		function getRequestTimeStatistics() {
			return $this->requestTimeStatistics;
		}
		
		function getTotalRequestTime() {
			return $this->totalRequestTime;
		}
	}
}


Beitrag veröffentlicht

in

,

von

Schlagwörter: