Smarty vs Twig: 效能對比

來源:互聯網
上載者:User

Smarty是PHP語言裡面最經典的模板引擎,如果你曾經開發過PHP程式,那麼或多或少都有使用過它。Smarty在2010年發布了第三版,Smarty 3用當下最新的PHP5進行了重構。它保留了原有的文法並加入了一些更現代的特性。 Twig是來自Symfony開發人員,Twig作者將其定位成一個快速及功能強大的現代模板引擎。Twig有著許多與Smarty 3相似的特性,但為了提高效能而稍微有些不同。 現在我們來將兩者進行一下效能對比測試:
測試 我們準備了較複雜的模板以便可以明顯看出程式執行的時間,以下是我們的代碼: 相同的功能,看起來Smarty實現更簡單些:

$data = json_decode(file_get_contents('data.json'), true); require('smarty/Smarty.class.php'); $smarty = new Smarty(); $smarty->compile_check = false; $start = microtime(true); $smarty->assign($data); $smarty->fetch('demo.tpl'); echo microtime(true)-$start; 

Twig更複雜些:
$data = json_decode(file_get_contents('data.json'), true); require('twig/Autoloader.php'); Twig_Autoloader::register(); $loader = new Twig_Loader_Filesystem('templates'); $twig = new Twig_Environment($loader, array(    'cache' => 'templates_c',    'autoescape' => false,    'auto_reload' => false, )); $start = microtime(true); $template = $twig->loadTemplate('demo.tpl'); $template->render($data); echo microtime(true)-$start; 

兩個程式都做了同樣的配置:關閉二次編譯、不顯示頁面,只留下執行時間的顯示。   從變數中擷取值 從變數中擷取值是比較常用的操作,在較複雜的模板開發中或許會用上幾百次。我們或許會認為該操作的執行速度不需要依賴於模板,但不是的,模板引擎會在模板中用一些資料結構來儲存變數的值,所以擷取變數值的操作需要更簡單和快速的效能。下面我們將產生一個帶有10000個值的模板以比較效能。 Smarty:
{$var0} {$var1} {$var2} {$var3} {$var4} ...

Twig:
{{ var0 }} {{ var1 }} {{ var2 }} {{ var3 }} {{ var4 }} ...

Result:
  Compiling Execution
Smarty 3.1.1 16.320 seconds 0.058 seconds
Twig 1.2.0 9.757 seconds 0.083 seconds
上面的表格示範了多次連續測試的平均值。我們可以看到程式已經編譯產生了1萬個變數的模板,Smarty在編譯的時候是遠遠落後於Twig。不過編譯僅僅是第一次訪問的時候執行,之後會一直使用編譯後的頁面,所以編譯後的頁面執行速度才是更重要的。編譯後的執行時間,Smarty是比Twig快速了30%左右,   使用多次foreach來測試 一般開發中模板經常用到foreach,這裡我們用了1000個帶有十個元素的數組,來測試一下兩個模板引擎的foreach效能。
Smarty:
{foreach $array as $item} {$item.id} {$item.title} {$item.var1} {$item.var2} {$item.var3} {$item.var4} {$item.var5} {$item.var6} {$item.var5} {$item.var6} {/foreach} 

Twig:
{% for item in array %} {{ item.id }} {{ item.title }} {{ item.var1 }} {{ item.var2 }} {{ item.var3 }} {{ item.var4 }} {{ item.var5 }} {{ item.var6 }} {{ item.var5 }} {{ item.var6 }} {% endfor %} 

Result: .
  Compiling Execution

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.