首頁 後端開發 php教程 Smarty模板引擎如何進行快取的機制詳解

Smarty模板引擎如何進行快取的機制詳解

Jan 02, 2018 am 09:58 AM
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(&#39;current_time&#39;,&#39;smarty_function_current_time&#39;,false);
if(!$smarty->is_cached()){
  .......
}
$smarty->display(&#39;index.tpl&#39;);
登入後複製

註解:

定義一個函數,函數名格式為:smarty_type_name($params, &$smarty)
type為function

name為使用者自訂標籤名稱,這裡是{current_time}

兩個參數是必須的,即使在函數中沒有使用也要寫上。兩個參數的功能同上。

相關推薦:

Yii2使用快取的簡單解析

建構PHP框架之建構模版引擎實例

php smarty模版運算子有哪些?操作符怎麼使用?

#

以上是Smarty模板引擎如何進行快取的機制詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

使用Python進行RFM分析 使用Python進行RFM分析 Sep 03, 2023 pm 12:45 PM

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

《黒神話:悟空》Xbox 版被曝因「記憶體洩漏」而延期,PS5 版優化進行中 《黒神話:悟空》Xbox 版被曝因「記憶體洩漏」而延期,PS5 版優化進行中 Aug 27, 2024 pm 03:38 PM

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

哈醫大臨床藥學就業是否有前途(哈醫大臨床藥學就業前景怎麼樣) 哈醫大臨床藥學就業是否有前途(哈醫大臨床藥學就業前景怎麼樣) Jan 02, 2024 pm 08:54 PM

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

PHP中的模板引擎Smarty初探 PHP中的模板引擎Smarty初探 May 11, 2023 pm 05:15 PM

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

如何使用PHP和Smarty實現前後端分離開發 如何使用PHP和Smarty實現前後端分離開發 Jun 25, 2023 pm 01:46 PM

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

PHP開發中如何使用Smarty模板引擎 PHP開發中如何使用Smarty模板引擎 Jun 27, 2023 pm 01:28 PM

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

如何清理temp資料夾 如何清理temp資料夾 Feb 22, 2024 am 09:15 AM

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

如何使用PHP和Smarty模板引擎 如何使用PHP和Smarty模板引擎 May 11, 2023 pm 03:33 PM

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

See all articles