<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-31  評論-257  文章-0  trackbacks-0
    緩存

          功能強大的應用程序一般都有很大的開銷,通常是數據獲取和處理操作帶來的。對于Web應用程序,這個問題是由于HTTP協議的無狀態性造成的。由于HTTP協議是無狀態的,對于每個頁面請求,都要重復地執行相同的操作,而不論數據是否修改。要讓應用程序在世界范圍最大的網絡中可用,會使這個問題進一步惡化。所以,毫不奇怪,人們總在想方設法地讓Web應用程序運行得更高效。對此有一種特別有效的解決方案,這也是最合理的方案之一:將動態頁面轉換成靜態頁面,只有在頁面內容有修改之后才重新構建,或者定期地重新構建。Smarty提供了這樣一個特性,一般稱為頁面緩存。
        如果要使用緩存,需要首先通過設置Smarty 的緩存屬性來啟用緩存,如下:
    1 <?php
    2   require("Smarty.class.php");
    3   $smarty = new Smarty;
    4   $smarty->caching = 1;
    5    $smarty->display("news.tpl");
    6 ?>

          啟用緩存后,調用 display() 和 fetch() 方法在指定模板 (由$cache_dir 屬性指定) 中保存目標模板的內容。

        處理緩存生命期

          緩存的頁面在由 $cache_lifetime 屬性指定的生命期(以秒為單位)內有效,默認為3600秒,即1小時。因此,如果希望修改此設置,就可以設置這個屬性,如下:
    1 <?php
    2     require("Smarty.class.php");
    3     $smarty = new Smarty;
    4     $smarty->caching = 1;
    5     //設置生命周期
    6    $smarty->cache_lifetime = 1800;
    7     $smarty->display("news.tpl");
    8 ?>

    在此對象的生命期內,后續調用和緩存的模板都使用此生命期。
        有可能需要覆蓋以前設置的緩存生命期,從而能分別控制每個模板的緩存生命期。通過將$caching 屬性設置為2就可以做到這一點,如下:
    1 <?php
    2     require("Smarty.class.php");
    3     $smarty = new Smarty;
    4     $smarty->caching = 2;
    5     $smarty->cache_lifetime = 1200;
    6     $smarty->display("news.tpl");
    7 ?>

    在這里,news.tpl 模板的生命期設置為20分鐘,它覆蓋了前面設置的全局生命期值。

    通過 is_cached( ) 消除處理開銷

        如前面所述,緩存模板還能消除處理開銷,如果禁用緩存(只啟用編譯),這些處理開銷總是會發生。但是,默認情況下并沒有啟用緩存。要啟用緩存,需要把處理指令放在 if 條件中,并執行 is_cached( )方法,如下:
     1 <?php
     2     require("Smarty.class.php");
     3     $smarty = new Smarty;
     4     $smarty->caching = 1;
     5    
     6     if (! $smarty->is_cached("news.tpl")){
     7         $conn = mysql_connect("localhost","name","pwd");
     8         $db = mysql_select_db("news");
     9         $query = "select * from news";
    10         
    11     }
    12     $smarty->display("news.tpl");
    13 ?>

          在這個例子中,將首先驗證模板news.tpl是否有效。如果有效,則跳過數據庫訪問,否則才訪問數據庫。

    為每個模板創建多個緩存
       
        任何指定的Smarty模板都可以用于為整個新聞項,博客項等提供一個通用界面。由于同一個模板用來生成不同數量的不同項,那么如何緩存一個模板的多個實例呢?答案比你想像的要簡單。Smarty的開發人員實際不已經解決了這個問題,可以通過display()方法為緩存模板的每個實例指派一個唯一標識符。例如,假設有一個用生成用戶信息的模板,并希望緩存這個模板的各個實例:
     1 <?php
     2     require("Smarty.class.php");
     3     require("User.class.php");
     4 
     5     $smarty = new Smarty;
     6     $smarty->caching = 1;
     7 
     8     //根據不同的用戶ID來區分不同的用戶實例來判斷有沒有被緩存
     9     if(! is_cached("userinfo.tpl",$_GET['userid'])){
    10         $user = new User();
    11 
    12         $smarty->assign("name",$user->getName());
    13         $smarty->assign("address",$user->getAddress());
    14     }
    15     
    16     /*
    17       當顯示時也根據該用戶的ID來區分將哪個實例進行緩存,而不影響其它用戶的緩存
    18     即是用userid 值來區分同一個緩存模板的不同實例,所有用戶都共用一個模板,
    19     但信息都不盡相同,所以不能統一緩存,要獨立分開緩存
    20    */
    21     $smarty->display("userinfo.tpl",$_GEG['userid']);
    22 ?>

    特別注意下面一行:
        $smarty->display("userinfo.tpl",$_GEG['userid']);
    這一行對于此腳本有兩個功能,一方面獲取名為$_GET['userinfo'] 的 userinfo.tpl 緩存版本,另一方面,如果還不存在這個緩存,則用這個名字來緩存該模板實例。采用這種方式,可以輕松地為指定模板緩存任意數量的實例。

    關于緩存的結語

        模板緩存大大提升了應用程序的性能,如果決定將Smarty集成到工程中來,就應當認真地考慮緩存。但是,因為大多數強大的Web應用程序功能都體現在其動態性上,所以一方面要考慮到性能提升,另一方面也要考慮到緩存頁面隨時間是否仍有效,要在這二者之間進行權衡。
    posted on 2008-07-29 13:55 姜大叔 閱讀(221) 評論(0)  編輯  收藏 所屬分類: PHP
    主站蜘蛛池模板: 污污网站免费观看| 国产精品视频全国免费观看| 18禁男女爽爽爽午夜网站免费| 亚洲AV无码乱码在线观看裸奔| 中出五十路免费视频| 亚洲日韩精品一区二区三区| 国产真人无码作爱视频免费| 久久久久亚洲av无码专区喷水| 18禁止看的免费污网站| 久久精品国产亚洲AV久| 成人男女网18免费视频| 午夜亚洲乱码伦小说区69堂| 亚洲精品国产精品乱码不卡| 中文字幕a∨在线乱码免费看| 国产亚洲情侣一区二区无码AV| 97无码人妻福利免费公开在线视频| 亚洲AV无码久久精品成人| 8090在线观看免费观看| 亚洲伊人精品综合在合线| 免费无码一区二区三区蜜桃大| 色哟哟国产精品免费观看| 亚洲精品无码久久久久sm| 99久久久国产精品免费牛牛 | 水蜜桃亚洲一二三四在线| 69免费视频大片| 亚洲国产成人AV网站| 国产精品亚洲精品日韩已满| 18级成人毛片免费观看| 亚洲第一第二第三第四第五第六 | 亚洲av中文无码乱人伦在线r▽| 一级特黄aa毛片免费观看| 亚洲一区二区三区丝袜| 中文亚洲AV片不卡在线观看| 亚洲大片免费观看| 免费亚洲视频在线观看| 亚洲视频免费一区| 亚洲精品97久久中文字幕无码| 最近免费中文字幕mv在线电影| 国产AV无码专区亚洲AV麻豆丫| 亚洲成av人片在线观看无码不卡| 好吊妞788免费视频播放|