Smarty模板引擎如何進行快取的機制詳解
本文主要介紹了Smarty模板引擎快取機制,結合實例形式分析了Smarty模板引擎快取機制的原理,開啟與使用方法以及相關注意事項,需要的朋友可以參考下。希望對大家有幫助。
具體如下:
首先說下smarty快取和編譯,這是兩個不同的概念,編譯預設是啟動的,而快取機制需要人為開啟,smarty編譯過的文件還是php文件,所以執行的時候還是編譯的,如果涉及到資料庫,還是要存取資料庫的所以開銷也不小啦,所以需要smarty快取來解決!
1.開啟全域快取
$smarty->cache_dir = "/caches/"; //缓存目录 $smarty->caching = true; //开启缓存,为flase的时侯缓存无效 $smarty->cache_lifetime = 3600; //缓存时间
2.一個頁面使用多個快取
如:一個文章範本頁面會產生多個文章頁面,當然快取成很多頁面,實作起來很簡單,只要在display()方法設定第二個參數,就指定唯一識別碼即可。如下php程式碼:
$smarty->display('index.tpl',$_GET["article_id"]);
如上,透過第二個參數文章的id快取一個文章頁面。
3.為快取減小開銷
也就是說,已經快取的頁面無需進行資料庫的操作處理了,可透過is_cached()方法判斷!
if(!$smarty->is_cached('index.tpl')){ //调用数据库 } $smarty->display('index.tpl');
4.清除快取
一般在開發過程中是不開啟快取的,因為在快取時間內輸出結果不變,但是在應用過程中開啟快取能大幅提升web效能,清除快取方法如下:
clear_all_cache();//清除所有缓存 clear_cache('index.tpl');//清除index.tpl的缓存 clear_cache('index.tpl',cache_id);//清除指定id的缓存
5.關閉局部快取
如果一個頁面中一部分緩存,而另一部分不需要緩存,就可以這樣做,比如說顯示用戶登入的名稱就需要關閉緩存,smarty提供瞭如下三種解決方法:
(1)使用insert模板的一部分不被緩存
#定義一個inser標籤要使用的處理函數,函數名稱格式為:insert_xx(array $params, object &$smarty)其中的xx是insert的name,也就是說,如果你定義的函數為insert_abc,則範本中使用方法為{insert name=abc}
參數透過$params傳入
也可以做成insert外掛,檔名命名為:insert.xx.php,函數命名為:smarty_insert_aa($ params,&$smarty),xx定義同上
(2)$smarty->register_block($params, &$smarty)使整篇頁面中的某一塊不被快取
定義一個block:
smarty_block_name($params,$content, &$smarty){return $content;} //name表示区域名
註冊block:
$smarty->register_block(name, smarty_block_name, false); //第三参数false表示该区域不被缓存
範本寫法:
{name}内容 {/name}
寫成block外掛程式:
第一步:定義一件外掛函數:block.cacheless.php,放在smarty的plugins目錄
block.cacheless.php的內容如下:
<?php function smarty_block_cacheless($param, $content, &$smarty) { return $content; } ?>
#第二步:寫程式及模板
範例程式:testCacheLess.php
<?php include(Smarty.class.php); $smarty = new Smarty; $smarty->caching=true; $smarty->cache_lifetime = 6; $smarty->display(cache.tpl); ?>
所使用的模板:cache.tpl
已经缓存的:{$smarty.now}<br> {cacheless} 没有缓存的:{$smarty.now} {/cacheless}
現在運行一下,發現是不起作用的,兩行內容都被緩存了
第三步:改寫Smarty_Compiler.class.php(註:該文件很重要,請先備份,以在必要時恢復)
查找:
複製程式碼 程式碼如下:
$this->_plugins[block ][$tag_command] = array($plugin_func, null, null, null, true);
修改成:
if($tag_command == cacheless) $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, false); else $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);
你也可以直接將原句的最後一個參數改成false ,即關閉預設快取。
(3)使用register_function阻止外掛程式從快取輸出
index.tpl:
<p>{current_time}{/p} index.php: function smarty_function_current_time($params, &$smarty){ return date("Y-m-d H:m:s"); } $smarty=new smarty(); $smarty->caching = true; $smarty->register_function('current_time','smarty_function_current_time',false); if(!$smarty->is_cached()){ ....... } $smarty->display('index.tpl');
註解:
定義一個函數,函數名格式為:smarty_type_name($params, &$smarty)
type為function
name為使用者自訂標籤名稱,這裡是{current_time}
兩個參數是必須的,即使在函數中沒有使用也要寫上。兩個參數的功能同上。
相關推薦:
#以上是Smarty模板引擎如何進行快取的機制詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python是一種多功能的程式語言,在資料分析和機器學習領域廣受歡迎。其簡潔性、可讀性和豐富的函式庫使其成為處理複雜資料任務的理想選擇。其中一個強大的應用是RFM分析,這是一種在行銷中根據客戶購買行為進行分割的技術。在本教程中,我們將透過使用Python來實施RFM分析的過程來指導您。我們將從解釋RFM分析的概念及其在行銷中的重要性開始。然後,我們將逐步深入探討使用Python進行RFM分析的實際面向。在文章的下一部分中,我們將示範如何使用Python為每個客戶計算RFM分數,考慮到為最近性、頻率和

近日,《黑神話:悟空》在全球範圍內都引發了巨大的關注,各平台的同時在線人數都再創新高,這款遊戲在多個平台取得了巨大的商業成功。 《黑神話:悟空》的Xbox版延期雖然《黑神話:悟空》已於PC和PS5平台發布,但其Xbox版一直沒有確切消息。據了解,官方已確認《黑神話:悟空》將登陸Xbox平台。但具體上線日期尚未公佈。最近有消息稱,Xbox版的延期是由於技術問題所致。據相關部落客透露,他在Gamescom期間與開發人員和"Xbox內部人士"的交流中得知,《黑神話:悟空》的Xbox版存

哈醫大臨床藥學就業前景如何儘管全國就業情況不容樂觀,但藥科類畢業生仍有著良好的就業前景。整體來看,藥科類畢業生的供給量少於需求量,各醫藥公司和製藥廠是吸收這類畢業生的主要管道,製藥業對人才的需求也穩定成長。據介紹,近幾年藥物製劑、天然藥物化學等專業的研究生供需比甚至達到1∶10。臨床藥學專業就業方向:臨床醫學專業學生畢業後可在醫療衛生單位、醫學科研等部門從事醫療及預防、醫學科研等方面的工作。就業機會:醫藥代表、醫藥銷售代表、銷售代表、銷售經理、區域銷售經理、招募經理、產品經理、產品專員、護

現如今,網站的開發離不了一個重要的組成部分——模板引擎。模板引擎是指一種將頁面模板和資料結合起來產生具有特定格式的html程式碼的工具。在各種網站開發框架中,模板引擎是一個必不可少的元件,因為模板引擎可以大量減少程式碼的重複性和提高頁面的動態性。其中一個最常見且流行的模板引擎是Smarty。 Smarty是基於PHP語言開發的DSL(DomainSpecif

在現代web開發中,前後端分離已經成為了一個非常流行的趨勢,它能夠讓開發者更好地組織專案並且提高了專案開發的效率。 PHP和Smarty是兩個非常常用的技術,它們可以用來實現前後端分離的開發方式。本文將會介紹如何使用PHP和Smarty來實現前後端分離開發。什麼是前後端分離開發在傳統的web開發中,前端主要負責頁面的呈現以及與後端互動的邏輯。後端則主要負責業

身為PHP開發者,使用模板引擎是理所當然的選擇。 Smarty是一種流行的模板引擎,它提供了一種將HTML/CSS/JavaScript與PHP程式碼分開的方式,使開發人員能夠更好地組織和管理專案。在本文中,我們將學習PHP開發過程中如何使用Smarty模板引擎。一、安裝Smarty在之前,我們必須安裝Smarty。在本文中,我們將使用Composer安裝

如何清理temp資料夾隨著我們在電腦上的使用,臨時檔案(temp檔案)會逐漸累積。這些臨時檔案是在我們使用電腦時產生的,例如瀏覽網頁時的快取檔案、軟體安裝時的臨時檔案等。長時間不清理temp資料夾可能會佔據大量磁碟空間,影響電腦運作速度。因此,定期清理temp資料夾是維護電腦效能的必要步驟。下面,我們將介紹清理temp資料夾的一些簡單方法。方法一:手動清理t

PHP是一種強大的伺服器端腳本語言,可用於開發網頁應用程式。在Web開發的早期階段,程式設計師使用了許多HTML和JavaScript程式碼來開發Web應用程式。但是,這種方法很難維護和管理,因為HTML和JavaScript程式碼可能會變得非常複雜。為了解決這個問題,Smarty模板引擎被創建出來。 Smarty是一種基於PHP開發的模板引擎,用於管理和生成W
