Section 11.6. Caching


11.6. Caching

PEAR offers two different packages for caching: Cache and Cache_Lite. As suggested 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.

11.6.1. 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

The idea behind Cache_Lite is that you only need to load the 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 execute, and keeps latency down.

11.6.1.1 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 displays 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.



    PHP 5 Power Programming
    PHP 5 Power Programming
    ISBN: 013147149X
    EAN: 2147483647
    Year: 2003
    Pages: 240

    flylib.com © 2008-2017.
    If you may any questions please contact us: flylib@qtcs.net