程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> smarty模板嵌套之include與fetch性能測試

smarty模板嵌套之include與fetch性能測試

編輯:PHP綜合

方法一、使用在父模板中使用{include file="child.tpl"}直接將子模板包含進來

  優點:

    1、有利於模塊的劃分和模板的重用。

    2、嵌套層次不多的時候,模板的結構清晰,一眼過去就知道這個模板的內容和結構。

    3、只需要一個smarty實例就能做完所有的事情,減少系統資源的占用。

  不足:

    1、子模板中的變量可能與父模板的變量發生沖突

    2、多重嵌套的時候,變量名沖突的幾率增大,為所有的變量賦值的難度也加大。

    3、子模板的可操控性差,例如不能通過設置$cache_id, $compile_id,來得到多個結果。

    4、擴展性差。如果需要添加新的模板的時候需要修改模板,同時還需要修改程序。

方法二、通過$smarty->fetch()將子模板的數據當成變量assign到父模板中

  優點:

    1、同樣有利於模塊的劃分,模板的重用

    2、模板的結構同樣清晰

    3、子模板作為單獨的對象,可操控性強

    4、擴展性較好 

    5、每個子模板都是單獨的對象,不會出現變量名沖突的問題

  不足:

    1、如果子模板多的時候,需使用多個smarty實例來實現,PHP代碼顯得臃腫

    2、占用較多的系統資源

    3、......

在那個的時候,出於對性能的要求,以及在沒有測試的情況下,想當然的認為include的性能一定就比fetch的性能要高,所有本人使用include這個方法,結果隨著系統功能的不斷的增加,感覺到越寫越復雜,這有很大一部分原因是設計的問題,但是模板間的嵌套也是問題之一,於是回過頭來考慮使用fetch這個方法。在重新做出決定之前對這個方法的性能做了測試,分別對單個模板的情況下和多個模板的情況進行測試

單個子模板測試:

有三個頁面test1.php,test2.php,test3.php。這三個頁面都輸出同樣的內容。test1.php的模板沒有嵌套,test2.php的模板使用了一次include,test3.php使用fetch來實現子模板的嵌套。使用apache自帶的ab測試訪問各個頁面所需要的平均時間(單位:ms)

第一次測試時,使用ab -n 10000 對以上三個頁面進行10次,每次累計10000個訪問,結果如下。

ab -n 10000 test1.php test2.php test3.php test2/test1 test3/test1 1 5.178 5.442 6.097 1.050984936 1.177481653 2 5.253 5.972 6.027 1.136874167 1.147344375 3 5.223 6.039 5.987 1.156232051 1.146276087 4 5.533 5.997 6.02 1.083860474 1.08801735 5 5.557 6.308 6.03 1.135144862 1.085117869 6 5.248 6.002 5.998 1.14367378 1.142911585 7 5.211 5.933 6.003 1.138553061 1.151986183 8 5.303 6.031 6.048 1.137280784 1.140486517 9 5.213 5.923 6.033 1.136197967 1.15729906 總計 47.719 53.647 54.243 1.124227247 1.136717031

第二次測試時,使用ab -n 100000 對以上三個頁面進行1次,每次累計100000個訪問,結果如下。

ab -n 100000 test1.php test2.php test3.php test2/test1 test3/test1 1 5.723 7.874 8.55 1.375851826 1.493971693

第一次測試的數據中,test1和test2的波動比較明顯,test3則比較穩定,這個現象讓我感到十分的奇怪。從平均數據來看,測試結果還是在預期之內的,test1的性能最好,test2比test1多耗費了12.42%的時間,test3比test1多耗費了13.67%的時間,但是test2和test3之間的差距並不大,僅僅只有1.3%左右的差別。

第二次測試的結果,三個頁面的執行時間比為1:1.37:1.49,奇怪的是這次的波動更大。。。

多個子模板測試:

同樣有三個頁面test1.php,test2.php,test3.php。這三個頁面都輸出同樣的內容。test1.php的模板沒有嵌套,test2.php的模板使用了10次include嵌入了10個子模板,test3.php使用10次fetch嵌入了10個子模板。使用apache自帶的ab測試訪問各個頁面所需要的平均時間(單位:ms)

因為時間的關系我只進行了一次ab -n 50000的測試,數據如下

ab -n 50000 test1.php test2.php test3.php test2/test1 test3/test1 1 5.68 6.054 6.028 1.06584507 1.061267606

 

雖然測試的方法和工具可能不是很好,但是通過這些數據的對比,在實際的應用中到底要采用哪種方法,我想大家應該心裡有底了吧。

不足和錯誤之處還望指出,希望大家能多討論多交流。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved