Smarty vs Twig 性能对比:
来源:互联网 发布:姚明数据统计 编辑:程序博客网 时间:2024/06/05 17:46
Smarty是PHP语言里面最经典的模板引擎,如果你曾经开发过PHP程序,那么或多或少都有使用过它。Smarty在2010年发布了第三版,Smarty 3用当下最新的PHP5进行了重构。它保留了原有的语法并加入了一些更现代的特性。
Twig是来自Symfony开发者,Twig作者将其定位成一个快速及功能强大的现代模板引擎。Twig有着许多与Smarty 3相似的特性,但为了提高性能而稍微有些不同。
现在我们来将两者进行一下性能对比测试:
$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 seconds0.058 seconds
Twig 1.2.0 9.757 seconds0.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
Smarty 3.1.1 0.065 seconds0.009 seconds
Twig 1.2.0 0.131 seconds0.082 seconds
这里有个令人惊讶的情况:编译后的Smarty模板比Twig执行快近10倍以上。与此同时,就算是编译+执行一起计算,Smarty还是会比Twig快。我们可以推测模板编译器而言,Smarty初始化比Twig要快许多。Smarty在上个测试中执行中稍微慢些,但在小型模板中几乎无法察觉。
继承
模板中继承是一个很方便的机制。或者可以认为继承是在使用已经过严格测试的模板引擎吧。让我们来看看当Smarty和Twig执行继承的时候会有多少性能上的负载。
我们建立了一个父模板,它拥有500个块(blocks)的子模板,每个子模板都继承于上一个子模板,同时子模板中都有静态的数据提供给父模板来调用。我们将通过模板引擎处理该继承链条的执行。
Result:
Compiling Execution
Smarty 3.1.1 1.329 seconds0.002 seconds
Twig 1.2.0 2.641 seconds0.121 seconds
Smarty快60倍以上。如果我们查看编译后的代码,会很容易明白还不止60倍。Smarty将整个模板的xx联合起来放到一个大文件中存放起来,执行起来就如同并不存在嵌套一样。也就是说,Smarty的xx机制计划没有任何的性能损失,Twig是小心地为每个xx模板建立类文件,并在执行期间一个个地嵌入并执行。
总结
结论很清晰:Smarty比Twig要更快,仅在一次性编译较大模板时耗费了更多的时间,但除此之外其他的操作均有更高的性能。
我们测试的环境是:奔腾双核T4200 (2 GHz),3GB内存,PHP5.3版本。如果你想在自己电脑上进行上述的性能测试,你可以在本文的最后下载全部代码。
Twig是来自Symfony开发者,Twig作者将其定位成一个快速及功能强大的现代模板引擎。Twig有着许多与Smarty 3相似的特性,但为了提高性能而稍微有些不同。
现在我们来将两者进行一下性能对比测试:
$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 seconds0.058 seconds
Twig 1.2.0 9.757 seconds0.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
Smarty 3.1.1 0.065 seconds0.009 seconds
Twig 1.2.0 0.131 seconds0.082 seconds
这里有个令人惊讶的情况:编译后的Smarty模板比Twig执行快近10倍以上。与此同时,就算是编译+执行一起计算,Smarty还是会比Twig快。我们可以推测模板编译器而言,Smarty初始化比Twig要快许多。Smarty在上个测试中执行中稍微慢些,但在小型模板中几乎无法察觉。
继承
模板中继承是一个很方便的机制。或者可以认为继承是在使用已经过严格测试的模板引擎吧。让我们来看看当Smarty和Twig执行继承的时候会有多少性能上的负载。
我们建立了一个父模板,它拥有500个块(blocks)的子模板,每个子模板都继承于上一个子模板,同时子模板中都有静态的数据提供给父模板来调用。我们将通过模板引擎处理该继承链条的执行。
Result:
Compiling Execution
Smarty 3.1.1 1.329 seconds0.002 seconds
Twig 1.2.0 2.641 seconds0.121 seconds
Smarty快60倍以上。如果我们查看编译后的代码,会很容易明白还不止60倍。Smarty将整个模板的xx联合起来放到一个大文件中存放起来,执行起来就如同并不存在嵌套一样。也就是说,Smarty的xx机制计划没有任何的性能损失,Twig是小心地为每个xx模板建立类文件,并在执行期间一个个地嵌入并执行。
总结
结论很清晰:Smarty比Twig要更快,仅在一次性编译较大模板时耗费了更多的时间,但除此之外其他的操作均有更高的性能。
我们测试的环境是:奔腾双核T4200 (2 GHz),3GB内存,PHP5.3版本。如果你想在自己电脑上进行上述的性能测试,你可以在本文的最后下载全部代码。
文章来自:http://umumble.com/blogs/php/249/
转自:http://dwphp.blog.51cto.com/4563391/819964
0 0
- Smarty vs Twig: 性能对比
- Smarty vs Twig 性能对比:
- Hadoop vs Spark性能对比
- Hadoop vs Spark性能对比
- Hadoop vs Spark性能对比
- C# vs C++ vs Java性能对比
- tengine vs nginx 在线性能对比
- C#内List VS hashset性能对比
- TokuMX vs. MongoDB 插入性能对比
- PHP 7 vs HHVM性能对比
- MessageFormat vs String plus性能对比
- Angular2 VS Angular4 深度对比:特性、性能
- 包围盒性能对比测试AABB vs OBB vs Sphere
- febird.dataio vs boost.serialization 运行性能对比
- SAS vs SSD对比测试MySQL tpch性能
- 逆向对比vs正向对比
- Flash Player 10.2 VS 10.1 Mac OS X下性能对比,DataGrid渲染速度大幅提升
- btHashMap vs std::unodered_map ——两种hashmap的性能对比测试
- 今天天气很好
- Android 画廊控件Gallary
- 在 Ubuntu 上安裝 DNS server
- Spek 无损音频分析工具
- 利用 SCILAB 设计 FIR 滤波器(窗函数法)
- Smarty vs Twig 性能对比:
- leanging perl(二) 输入与输出
- 软件需求分析的概念
- 扑克牌随机显示
- SQL Server 存储过程
- git学习七(SSH公钥)
- 王者之争
- Asp.net在线阅读文件(pdf,txt,doc,jpg等)
- C# Winform/Server 提交协议冲突 Section=ResponseStatusLine 的解决,可能是服务器引起的异常