搜尋
首頁後端開發php教程PHP模板引擎SMARTY_PHP教程

PHP模板引擎SMARTY_PHP教程

Jul 21, 2016 pm 04:11 PM
mvcphpsmarty實現開發引擎模式範本表示邏輯


用PHP實作MVC開發模式的邏輯層和表示層有多種模板引擎可供選擇, 但官方引擎SMARTY誕生後,選擇就有了變化。它的理念和實現都是 相當"前衛"的。本文主要討論SMARTY之於其他模板引擎的不同特點, 簡要介紹了該引擎的安裝及使用,並用一個小的測試案例對比了 SMARTY和PHPLIB template的速度和易用性。

一、MVC需要模板
MVC最早是在SmallTalk語言的開發過程中總結出的一種設計模式,MVC分別代表了"模型"、"視圖"和"控制",目的就是讓不同的開發角色在大中型專案中各司其職。在網路應用程式的開發中,可以用下圖來表示各概念之間的關係。


該圖展示了一個簡單的WEB應用程序,用戶在瀏覽器上看到資訊是資料庫服務 器上的內容,但在這之前經過了應用伺服器加工。開發人員負責的就是建立數 據結構、處理資料的邏輯、表示資料的方法。

96年CGI在中國開始流行的時候,早期的WEB程式設計師都是從HTML開始自學成材的,在PERL中print一行行的HTML並不是一件難事,但是隨著網路的一步步提速,頁面大小也從當初的二、三十K暴漲了十倍。寫CGI程式就產生了一個迫切的要求:分開PERL和HTML源碼。於是,社會進步體現在開發小組內部的分工 上。由於美工和程式設計師對互相的工作並不是十分熟悉,在進行合作的過程中需 要用一種約定的"語言"進行交流。

這種語言並不是我們的母語或英語,術語叫做"模板",邏輯和表示依靠它聯 系。它是結合了HTML和腳本語言特徵的一種表達方式。透過這種方式,表示層 可以按照使用者所希望的格式來顯示經過邏輯層處理過的資料。如果你有 Windows平台下MFC的開發經驗,那麼一定會很熟悉Document/Document Template/View的封裝,這就是一個很典型的MVC例子。對於Web應用來說,個 人認為J2EE中的EJB/servlets/JSP是最強大的,當然還有簡潔優美的Structs。 另一個很有名的實作就是COM/DCOM ASP,這個組合在我國是最多人使用 的。

透過幾種MVC實現在WEB應用程式裡的對比,可以得到一個關於模板的概念: 一組插入了HTML的腳本或者說是插入了腳本HTML,透過這種插入的內容來表示變化的數據。下面給一個範本檔案的例子,這個範本經過處理後在瀏覽器裡顯示"Hello, world!"

引言:
-------------- -------------------------------------------------- ----------------




$greetings


$greetings




-------------- -------------------------------------------------- ----------------



這裡暫且省略處理方式,在後面做專門對比討論。

二、為什麼選SMARTY?
對PHP來說,有很多模板引擎可供選擇,比如最早的PHPLIB template和後起之 秀Fast template,經過數次升級,已經相當成熟穩定。如果你對目前手中的模 板引擎很滿意,那麼......也請往下看,相信你作為一個自由軟體愛好者或追求 效率和優雅的開發者,下面的SMARTY介紹多少會有點意思。

除了個人偏好的影響,我一直傾向於使用官方標準的實現,例如APACHE的XML 引擎Axis。好處就是可以獲得盡可能好的相容性(例如早期MFC對於Win3x的兼 容性就比其它的應用程式框架好,當然現在各種版本都很完善了)。 SMARTY發 布之前我一直使用的是PEAR 中的Integrated Template eXtension。這個引擎和PHPLIB template、Fast template幾乎是相容的,從模板的語法到對模板的處理同出一轍:都是將模板讀入內存然後調用parse()函數,用數據對預置的標記進行替換。

下面來看看SMARTY是怎麼做的。接到request後,先判斷是否第一次請求該url, 如果是,將該url所需的模板檔案"編譯"成php腳本,然後redirect;如果不是, 就是說該url的模板已經被"編譯"過了,檢查不需要重編譯後可以馬上redirect, 重編譯條件可以自己設定為固定時限,預設的是模板檔被修改。

怎麼樣,看起來是不是有點眼熟?想起來了--這不就是JSP的原理嘛!的確, 這種"編譯"用在PHP這樣的解釋性腳本引擎上顯得匪夷所思,但是仔細想 想,JAVA不也是由JVM解釋執行的嗎?這就叫"沒有做不到,只有想不到"。

既然談到了JAVA,就再對PHP的未來發表一點看法。 PHP官方網站上宣布了要在2003年年底發布PHP5.0版。這個版本擁有許多嶄新的特性:例如異常處理, 命名空間,更加面向對像等等。可以說越來越向JAVA靠攏,SMARTY也是新特 性之一,使得PHP更適用於大中型專案的開發。但似乎離我當初選擇它的原 因──靈巧易用──越來越遠了。但就一個軟體的生存週期來看,PHP正處於 成長期,開發者賦予它更多的功能,以期能勝任商業應用是利大於弊的。身為 PHP的忠實用戶,肯定不希望PHP總是被指責"能力不足"吧?

為什麼選擇SMARTY,只因為它很像JSP?當然有更為充分的理由。首先,除了第一次編譯的成本比較高之外,只要不修改模板文件,編譯好的cache腳本就隨時可用,省去了大量的parse()時間;其次SMARTY像PHP一樣有豐富的函數庫,從統計字數到自動縮排、文字環繞以及正規表示式都可以直接使用;如果覺得不夠,例如需要資料結果集分頁顯示的功能,SMARTY還有很強的擴展能力,可以透過插件的形式進行擴充。

事實勝於雄辯。我設計了一個測試程序,透過速度和開發難度這兩個因素對比了一下SMARTY和PHPLIB template,選PHPLIB template的原因是在patrick的文章《在PHP世界中選擇最合適的模板》中有一個PHPLIB template對Fast template 的競賽,結果PHPLIB template大獲全勝,這使得SMARTY有了一個很好的對手。在測試之前,先談談在安裝過程中需要注意的問題。

三、可能遇到的問題
在SMARTY的官方網站上,有詳盡的使用手冊,可以選擇線上HTML和PDF格式 的版本。這裡就不再涉及手冊上已有的內容,只是把初次使用可能遇到的問題 做個解釋。

第一個問題就很要命:提示說找不到所需文件?並不是每一個人都按照 SMARTY預設目錄結構來寫應用的。這裡要手動指定,假設目錄結構如下:


需要在index.php裡指定目錄結構:
引言:
------------ -------------------------------------------------- ------------------

$smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c /";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";


------ -------------------------------------------------- ------------------------



第一個問題解決了,緊接著是第二個:我剛用Dreamweaver產生的漂亮模板怎麼不能用?並不是模板檔案有什麼問題,而是因為SMARTY預設的標記分隔 符號是{},不巧的是Javascript肯定包含這個標記。還好我們可以用任意字元當作分隔符,再加上這兩句話:
引言:
----------------------- -------------------------------------------------- -------


$smart->left_delimiter = "{/";
$smart->right_delimiter = "/}";


-------------------------------------------------- ------------------------------



這下安裝就基本完成,沒問題了。

四、反襯和類比
先構思一下對測試的設計。主要的評比因素當然是速度了。為了進行速度測 試,採取了算術平均數的作法。在測試頁面中重複將頁面產生N遍,再比較總頁 面產生時間。另一個重要因素是易用性(至於擴展性不用比較已經有結果了),所 以使用的模板不能太小。我用的是個人首頁的的頁面,一個用 Firework Dreamweaver產生的HTML文件,大小約7K。其中的變數設定也採取 最常用的區塊,在PHPLIB template裡叫block,而SMARTY則稱section。別小看 這稱呼的不同,易用性標準分成兩塊:範本文件和腳本文件的語法是否簡明易 用。


下面就深入到測試中來。先看看兩種模板檔案的語法:藍條左邊是PHPLIB template的模板,右邊屬於SMARTY。個人偏好是不一樣的,所以這裡不作評 論。著重比較一下腳本裡的處理語句,先看PHPLIB template的:
引言:
--------------------------- -------------------------------------------------- ---


$tpl->set_file('phplib', 'bigfile.htm');
$tpl->set_block('phplib', 'row', 'rows') ;
for ($j = 0; $j $tpl->set_var('tag' ,"$j");
$tpl->parse('rows ', 'row', true);
}
$tpl->parse('out', 'phplib');
$tpl->p('out');


---------------------------------------------- ----------------------------------


下面是SMARTY的:

引言:
----------------------------------------- ---------------------------------------

$smart->assign ('row',$row);
$smart->display('bigfile.htm');

------------------- -------------------------------------------------- -----------



SMARTY只用了tags和row兩個變量,而PHPLIB template則多了模板文件的handler,還有一個莫名其妙的out。說實在的這個out我當初學的時候就不知道 為什麼要存在,現在看起來,還是彆扭。為什麼SMARTY少那麼多處理語句 呢?答案是工作由引擎完成了。如果你喜歡鑽研原始程序,你可以發現在 Smarty_compiler.class.php裡有一個名叫_compile_tag()的函數,由它負責把 section這個標籤轉換成php語句。這不是一個普通的標籤,它帶有參數和數 據,節省了腳本編程的工作量,而模板標籤上的工作量相差又不大,可以判定 在易用性上SMARTY高出一疇。

下面該輪到我們最關注的速度了,畢竟對於一個熟練的web開發者來說,掌握再 困難的工具不過是時間問題,何況模板引擎這種學習曲線平緩的技術。而速度 則是web應用程式的生命,尤其是模板引擎使用在並發訪問量很大的網站上,這 點就更重要了。測試開始前,我覺得PHPLIB template會在這一環節上勝出,因 為它經歷了很多次升級,已經基本沒有什麼bug,而且SMARTY的引擎個頭太 大,不像它的對手只有兩個文件。

果然,測試結果如下圖,PHPLIB template有25%的速度優勢:


但不會一直這樣,我又按了一次刷新,這次得到了不一樣的結果:


PHPLIB基本上沒變化,但是SMARTY提高了25%的速度。繼續刷新,得到的都是 類似第二次的結果:SMARTY比PHPLIB template 快上近10%。我想這就是編 譯型比解釋型快的原理了。 SMARTY引擎本身就很大,加上還要把模板編譯成 php文件,速度當然比不上小巧的PHPLIB template。但這只是第一次的情況。 第二次接到請求的時候,SMARTY發現該模板已經被編譯過了,於是最耗時的 一步被跳過了,而對手還要按部就班地進行查找和替換工作。這是編譯原理裡 講到的很經典的"用空間換時間"例子。

五、結論
結論就是如果你已經愛上SMARTY了,那還等什麼呢?當然不是說它就全 能,就如同我用MVC模式來寫我的個人網站,非但沒有減少工作量,反而總是 要為不同層次間的耦合勞神。

SMARTY不適合什麼呢?舉個手冊裡的經典例子:天氣預報網站。我還想到一 個:股市大盤。在這種網站上用SMARTY會因為經常的重編譯而效率偏低,還 是PHPLIB template比較為適合。

本文不是為了比較兩款引擎,而是為了說明SMARTY的優勢。使用它最有意 義之處在於它是PHP新體系的一部分,作為一支獨立的力量,除了.NET和JAVA ONE這兩大體系之外,大中型web開發還有別的選擇。這對GNU專案來說, 其意義無異於劉鄧大軍千里躍進大別山。

參考文獻

SMARTY官方網站:smarty.php.net
王晨:《在PHP世界中選擇最合適的模板》
本文中測試程式下載:test .tar.bz2
http://phpe.net/uploads/attach/article_1058233528.bz2
About the author
於博翔,筆名於萊來自對外經濟貿易大學資訊學院。 GNU痴迷者,喜歡練習各種程式設計 言,研究各種體系框架。

發文數:1275 回覆:與許多的PHP script 都將使用Smarty為核心引擎,而Smarty到底是什麼? 2003-08-10 14:07

在PHP世界中選擇最適合的模板--比較PHPLIB Template和FastTemplate



PHP工程中的模板應用,是進行中型乃至大型專案中建議採用的處理表現層的好辦法。但 是具體到模板的實施,採用何種現有的模板技術卻需要進行一番比較。

PHP世界中比較受關注的模板處理有PHPLIB Template和FastTemplate兩種,我們對技術的易用性和速 度進行了評測--想知道結果嗎?

事情的起因:你用過FastTemplate嗎?
對於PHP工程中的模板應用,其實我和我的同事們已經在許多的項目中接觸過--關於它的好處,我想無論是在實際開發階段還是上升到設計模式的角度都已經有很多"前輩先哲"討論過了。就專案實施而言,在一些中型甚至大型的專案中,有效的將HTML(還有其他文字形式的表現層)和PHP程式碼分開,不僅在開發階段可以分別提高介面設計人員和應用程式編寫人員的工作效率,更會為專案的測試和維護帶來巨大的便利。

但是--本文的目的不是討論模板的優缺點,也不是作為指導性的教程講授如何在PHP項目中使用模板,而是以應用的視角比較兩種PHP世界中最為流行的模板處理方式(其實只不過是兩種模板類別):PHPLIB Template和FastTemplate。

其實我一直都在"安靜"的使用著PHPLIB Template--很穩定而且看上去速度也不錯,以至於我並不想再去不安的尋找可能更好的替代品--雖然我也知道這個地球上還有FastTemplate這樣的東西(而且還在Perl的世界中大名鼎鼎)。直到有一天,有同事問我:"不知道FastTemplate怎麼樣?為什麼我們不試試FastTemplate呢?"

"好吧,就讓我們試試!」不過作為一個穩健的方法,在任何新的模式或方法引入專案之前,最好能夠更加全面的了解它,以及找到一個或幾個足夠說服自己和同事去採用它的理由--對於FastTemplate也不例外。

主角出場:了解PHPLIB Template以及FastTemplate
前面已經說過,我已經使用PHPLIB有一段時間了--我想屏幕前的你也許和我一樣,也對這個優秀的工具類庫印像很深吧!同樣,當我開始尋求範本的解決方案時,很自然的就會在最接近身邊的工具箱裡搜尋,於 是我找到了PHPLIB中的Template類別。在最初的很快瀏覽完它提供的API之後(當然還得感謝PHPLIB詳盡 的文檔),我就開始了使用它的歷程--直到現在。

而FastTemplate似乎名氣更響亮一些,在其發蹟的Perl世界中自然是這樣,在PHP世界中似乎也是,單單 從這一點上就足夠讓人相信它的能力了。

關於兩者的使用辦法,本來我想在這裡多廢話幾句的;但是畢竟覺得自己恐怕專門寫出兩篇教程來也沒有現有的教程受歡迎--在本文的參考資料中有關於PHPLIB Template和FastTemplate的有名教程,如果你自認還沒有對這兩種模板或者其中的一種有所認識,建議你先去看看那兩篇文章,應該會得到不少有益的模板應用知識。

(一番滑鼠點擊以及眼球轉動甚至親自編寫測試程式碼之後,)現在你對兩種模板都有了一些了解,也許已經發現了它們之間的很多相似之處,在下面我就會將這些地方歸納。

變數的設定
很明顯,{FOO}或{BAR}的形式在兩種範本中都是指定的形式;也就是說,兩種範本處理方式中,範本檔案本身的外貌應該可以是一致的(例如都是HTML檔案中間含有將要被替換的以{}標識的變數)。
模板類別的初始化(類別的建構器)
都需要在建構模板類別的時候指定模板檔案存在的目錄位置。
變數的替換
模板處理中最常用的就是變數替換,兩種方式除了方法名稱不同之外(PHPLIB Template採用set_var(),而FastTemplate採用assign()),用法幾乎也是一致的- -可以採用(key, 值)的方式, 也可以直接傳遞一個陣列(array(key=>value))。
範本檔案的處理
都是採用為每一個範本檔案指定一個句柄(handler)的辦法,同時句柄也可以作為變數的值來取代 另一個範本檔案中的變數。
解析、輸出過程
都是需要呼叫parse()方法(這個方法名稱竟然是相同的)將需要輸出的模板檔案解析後賦值給一個句柄,然後呼叫各自輸出的方法(PHPLIB Template中是p(),FastTemplate中是FastPrint())輸出該句柄的內容並結束處理。
重複解析的過程
例如從資料庫中取出幾筆記錄需要顯示而模板檔案只有可替換的一行變數的時候,就很需要這樣的 功能。兩者都具有這樣的功能,只是使用時稍稍有些不同而已(PHPLIB Template採用parse(handler, value, true),而FastTemplate採用parse(handler, .value)在值的前面多加一個點),應該說PHPLIB Template的方法構造得相對優美一點。
區塊解析的過程(或可以稱作動態解析)
想像一下你需要從資料庫中取出符合條件的資料並顯示在網頁中--但是因為條件會不盡相同,你並不能明確的知道會有多少條數據--這時候如果你又要採用模板,那麼區塊就是最好的選擇。它是在 模板中用特定的符號定義的部分,這一部分可以重複的被解析並添加到(而不是前一次的解析被後 一次覆蓋)輸出網頁中。區塊也許就像下面顯示的一樣(左邊是PHPLIB Template採用的區塊設置,而右邊則是FastTemplate採用的):



好吧,如果你對以上蒼白的文字介紹還是有些摸不著頭腦,那麼我們就來看看兩個詳盡的模板處理的例程吧! (如果你有興趣對後面的測試程式碼進行發掘,你會發現其實以下的兩個例子都來自那裡)


怎麼樣,是不是感覺幾乎是一致的?以下是區塊解析的例子,你也會發現同樣的效果:


我們的測試目標和結果
結束了對PHPLIB Template和FastTemplate的了解,應該可以進入本文的正題了--在應用環境中當然應該選擇易於使用同時速度理想的部件構建系統,那麼對於這樣的兩種類似技術,進行評測非常有必要。評測 應該是由兩部分組成:技術的使用難度和速度的快慢程度--前者是評論的部分,而後者是測試的部分。對 於前者,我們主要針對兩個類別提供的API進行評論;對於後者,我們會讓測試的資料來說話,當然這中間 免不了需要編寫一些簡單的測試程式碼。

回合一:技術的易用性
這一回合主要是探討PHPLIB Template和FastTemplate提供的API的使用情況。應該說,前者提供的API 更符合PHP的一些常見編碼慣例(特別是當你的專案中採用了PHPLIB的其他類別時,這樣的規範性會對整個專案有好的影響);而後者的一些方法名總覺得有些彆扭(希望你不要覺得這只是我的狹隘看法,比如FastPrint()等等),同時方法的參數也不是非常"地道",這一點你也可以從剛才的程式碼看出來。

另外一點要指出的是,對於模板區塊的解析,FastTemplate直到最近的版本才開始支援。也就是說,如果你採用了之前的版本,在處理諸如數據庫中記錄的輸出等內容時,不得不把這塊內容獨立存儲在某處, 然後在模板分析處理時附加上這個文件--真是一件讓人難受的事情,尤其是對網頁設計師而言。

當然還有一點要考察--那就是對於PHP版本的支援。 PHPLIB產生在PHP3的時代,這和FastTemplate差不多;但是根據我們的應用,PHPLIB在現在的PHP4環境下運行相當好,而FastTemplate的網頁上則顯示了一些資訊表明對於PHP4也許它還有一些BUG存在。

好了,講了這麼多(也許你會覺得都是FastTemplate的壞話),這個回合的勝利者很明顯:PHPLIB Template,尤其是你同時在使用PHPLIB的其他類時,這樣的技術易用性更加明顯(你將不會對這些出自同一個開發小組的API感到陌生)。

回合二:處理速度
也許這才是很多人最關注的部分--在這個回合中,我們會採用兩種模板處理的方式:一種是常規的分析、 替換,另一種是對區塊的解析、替換--同時這樣的兩種方式也是在實際系統中應用最多的:前者是一般的頁面處理,後者是關於資料庫內容的輸出處理。同時,由於兩種範本類別所採用的範本檔案的格式基本上相同, 使得我們可以提供幾乎一致的範本檔案分別供兩種範本解析,更增加了測驗的可信度。

進行這樣的速度測試之前會擬定一個測試方案,簡單說來就是對於兩種處理方式分別編寫兩個PHP測試頁面,同時有一個控制測試的頁面多次調用這兩個頁面並記錄時間供採集測試數據。 (如果有興趣你也可以參考以下詳細的測試方案,也許會對你深入了解這次測試有所幫助)

小結--在整個測試系統完成之後,我們應該能夠得到/test目錄中如下的文件清單:

(有點複雜的測試方案)

首先是確定測試的硬體和軟體環境--硬體肯定是自己的機器了,Intel Celeron 733MHz, 256M RAM ,40G HDD;軟體平台中OS為Win2K Pro,Web伺服器為Apache PHP,且以模組方式運作。

其次是規劃這次測試的系統--當然先在Web伺服器的文檔根目錄下開一個tpl_test的新目錄用以放置這個測試的​​所有文件;然後在/tpl_test下建立include目錄以存放兩個模板類別檔案(我們測試的核心,以.inc.php為檔案副檔名)以及一個測試類別檔案(包括了計時和記錄日誌以及讀取日誌並分析等功能,以.inc.php為文件擴展名)和一個資料檔案(為區塊解析的測試做準備,主要包含了一個二維數組,同樣以.inc.php為檔案副檔名),建立ihtml目錄存放使用的模板檔案(需要解析的範本文件,以.ihtml為文件副檔名),建立logs目錄存放測試產生的日誌(後面就是發現,其實測試的資料就是由對這些日誌的分析得到的,以.log為文件副檔名)。當然,兩種模板的處理PHP檔案就放在/test目錄下。這次測試最關鍵的一點是, 還要建立一個PHP文件,對以上提到的負責模板處理的文件進行幾次呼叫:例如一個文件fast_test.php是採用FastTemplate解析模板的,而phplib_test.php是採用PHPLIB Template 解析的,那麼這個得出結果的PHP檔案就負責多次以HTTP的方式請求以上的兩個頁面以獲得測試資料。

選擇待解析的模板和PHP程式編寫--因為兩種模板處理方式對於模板檔案本身的格式要求幾乎一致(例如待替換變數都採用{VAR}的形式等等),因此可以盡量確保同一測試中兩者選用的模板盡可能相同以謀求測試的最大公正性;同時在前文提到,為模擬現實係統中常用的兩種模板應用:一般的頁面處理和對數據庫內容的輸出處理,測試使用的模板文件也分成兩種:一種是普通的帶有一些待替換變量的模板文件,另一種是帶有區塊的需要根據應輸出的內容反复替換的模板文件。同樣對於這兩種模板文件,也需要分別編寫兩種不同的PHP文件 來解析。

測試方法--在瀏覽器中向/test/result.php提出請求,需要帶參數type=[simple|complex],在返回的結果中即可看到兩種模板在簡單或者複雜模式下的測試結果。

Level 1
Level 2
Level 3
Remark

/test


測試系統的根目錄


測試系統的根目錄







result.php

進行測試並產生結果的PHP文件,測試時只需要在瀏覽器中請求該頁面即可獲得測試資訊


simple__test_phplib.php

使用PHPLIB Template對一般模板進行分析的PHP檔案


simple__test_fast.php


simple__test_fast.php

complex__test_phplib.php

使用PHPLIB Template對帶區塊模板進行分析的PHP檔案

.php

使用FastTemplate分析有區塊模板的PHP檔案







/include



/include



/include
包含PHP類別檔案.inc.php



phplibTemplate.inc.php
PHPLIB Template類別檔案


FastTemplate🎜>

FastTemplate🎜>

FastTemplate🎜>

FastTemplate. php
FastTemplate類文件



TplTest.inc.php
測試中需要使用的測試類,包含諸如計時、讀取/分析日誌等方法。



data.inc.php
測試有區塊模板時所採用的資料檔案。







/ihtml

包含模板檔.ihtml


.ihtml
採用PHPLIB Template處理的一般範本檔案



simple_fast.ihtml
採用FastTemplate處理的一般範本檔案


採用FastTemplate處理的一般範本檔案



complex_phplib.ihtml
用PHPLIB Template處理的帶區塊的模板檔案



complex_fast.ihtml
採用FastTemplate處理的帶區塊的模板


用>





/logs

包含日誌檔案.log



simple_fphplib.採用PHPLIB Template處理一般範本產生的日誌simple_fast.log 採用FastTemplate處理一般範本產生的日誌com 採用PHPLIB Template處理帶區塊模板產生的日誌complex_fast.log 採用FastTemplate處理帶區塊模板生成的日誌經過了測試系統的設計和編寫,並且向負責網頁設計的同事討來兩個模板之後,我們就可以訪問這個系統了--前期的辛勤勞動使得現在觀看結果的工作只需要在瀏覽器的地址欄中打入http://localhost/tpl_test/ result.php?type=[simple|complex] (如果你是在其他的非本地伺服器中進行這個測試,那麼網域名稱應採用所在伺服器的網域-例如我自己的機器叫做patrick等等)。以下是我自己在某一次的測試中獲得的結果:(測試結果數據解釋)

名稱
解釋
備註

amount
測試總數(連續請求此頁總數)
此參數可在result.php檔案中修改

max_seq
最大處理時間的序號
範圍在1-amount之間

max_value
最大處理時間的值
峰值資料供參考

min_seq
最小處理時間的序號
範圍在1-amount之間

min_value
最小處理時間的值
峰值資料供參考

average
平均處理時間
測試中最有價值的數據


當然,如果你覺得一次測試的結果並不可靠,可以重複按下瀏覽器的刷新按鈕,就能夠觀察到不同測試的

結果(理論上應該是相差無幾)。

測試結果以及頒發"XX選擇獎"
好了,在偏重速度測試的回合二中PHPLIB Template以驚人的2倍的速度戰勝了FastTemplate;而同時在第一回合中PHPLIB Template有以良好的API設計和易用性佔上風。結果顯而易見--我們的選擇獎當然頒 發給了PHPLIB Template,同時這次的測試也讓我們對PHPLIB這個類別庫設計有了更深的了解。

主觀評價
既然有了結果,那麼FastTemplate自然也就不能進入我們的專案了--雖然從結果上看來我們花了半天的時間得到了一個毫無變化的結果( PHPLIB Template繼續很好的在專案中使用),但是測試的過程卻是很有價值的,特別是採用PHP進行測試的方法,應該會在以後的類似決策中起到一定參考作用。


www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314004.htmlTechArticle用PHP實作MVC開發模式的邏輯層和表示層有多種模板引擎可供選擇, 但官方引擎SMARTY誕生後,選擇就有了變化。它的理念和實現都是 相當...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
超越炒作:評估當今PHP的角色超越炒作:評估當今PHP的角色Apr 12, 2025 am 12:17 AM

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

PHP中的弱參考是什麼?什麼時候有用?PHP中的弱參考是什麼?什麼時候有用?Apr 12, 2025 am 12:13 AM

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

解釋PHP中的__ Invoke Magic方法。解釋PHP中的__ Invoke Magic方法。Apr 12, 2025 am 12:07 AM

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

解釋PHP 8.1中的纖維以進行並發。解釋PHP 8.1中的纖維以進行並發。Apr 12, 2025 am 12:05 AM

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區:資源,支持和發展PHP社區:資源,支持和發展Apr 12, 2025 am 12:04 AM

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP與Python:了解差異PHP與Python:了解差異Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

php:死亡還是簡單地適應?php:死亡還是簡單地適應?Apr 11, 2025 am 12:13 AM

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來:改編和創新PHP的未來:改編和創新Apr 11, 2025 am 12:01 AM

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用