22 views

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 a Comment

You must be logged in to post a comment.