CHAPTER 11 – CACHING

PEAR offers two different packages for caching: Cache and Cache_Lite. As sug- gested by the name, Cache_Lite has a lighter design than Cache, and is designed to be faster at the expense of some flexibility and functionality.  

Cache_Lite The Cache_Lite package offers simple, fast, file-based caching. It is restricted to caching in files for speed and simplicity. Cache_Lite provides three types of caching: Generic caching of any data Caching of PHP output Caching of function return values T h e i d e a b e h i n d Cache_Lite i s t h a t y o u o n l y n e e d t o l o a d t h e Cache_Lite class to use it. It does not load the PEAR class unless needed in a raiseError() call, and not many other classes. If you are not using a PHP code cache, this package avoids compiling code you potentially will not exe- cute, and keeps latency down.

Example: Output Caching Following is an example of PHP output caching that serves the entire page from the cache: <?php require_once "Cache/Lite/Output.php"; $time_s = utime(); if (empty($_GET['id'])) { die("please specify an article id!"); } $cache = new Cache_Lite_Output( array('lifeTime' => 300, // 5 minutes 'cacheDir' => '/tmp/article_cache/')); if ($cache->start($_GET['id'], 'article')) { $cached = true; } else { include_once "DB.php"; include_once "HTML/Template/Flexy.php"; $dbh = DB::connect("mysql://test@localhost/test"); $article = $dbh->getRow( "SELECT * FROM articles WHERE id = ?", array($_GET['id']), DB_FETCHMODE_OBJECT); $dir = dirname(__FILE__); $tpl = new HTML_Template_Flexy( array('templateDir' => "$dir/templates", 'compileDir' => "$dir/templates/compiled", 'filters' => 'Php,SimpleTags,BodyOnly')); $tpl->compile('flexy_display_article.tpl'); $tpl->outputObject($article); $cache->end(); $cached = false; } $elapsed = utime() - $time_s; printf("<div style="font-size:x-small">". "(spent %.1fms %s)</div>n", $elapsed * 1000, $cached ? "serving page from cache" : "generating page");

function utime() { list($usec, $sec) = explode(" ", microtime()); return (double)$usec + $sec; } As you can see, this script only includes Cache/Lite/Output.php every time. If the page is served from a cache, no other code is loaded because DB.php and HTML/Template/Flexy.php are included only if there was no cache hit. The $cache->start() looks up the requested entry in the cache. If it is found there and has not expired, the cached entry is printed, and the start() method returns true. If a cache entry was not found, start() returns false. Then, the script connects to the database, pulls out the article, compiles a template, and dis- plays the article. After all this, the $cache->end() call prints the output and stores it in the cache. At the end, the cache output example displays a message to illustrate the response time difference with a cache hit.

SUMMARY Covering all the interesting packages in PEAR is beyond the scope of this book, so this chapter presents some of the most commonly used packages. The intention of this chapter is to get you up to speed with these pack- ages so you can proceed with the online documentation and explore other PEAR packages. For reference, you can find the PEAR online documentation at http://pear.php.net/manual/

Post Comment
Login to post comments