免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3982 | 回复: 3
打印 上一主题 下一主题

PHP模板系统的对决:Blitz、smarty和php原生代码 [复制链接]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-31 17:17 |只看该作者 |倒序浏览
本帖最后由 lsstarboy 于 2012-07-31 17:19 编辑

原文请移步以下链接:请点击此


网上关于Blitz的资料很少,仅有的几个测试也有点模糊,并且只测试了直接输出变量的部分,这次我加入了数组的循环测试部分。

一、Blitz

1、从0-100循环,总流量已经超过7M,很可能会受网速的限制。
   服务器CPU利用率:85%左右,负载:1或2
   最繁忙的程序是nginx
   CPU利用率恢复到0%时,测试马上结束。
  1. %webbench -t 90 -c 200 http://ict.sdcangyuan.com/test/blitz/test.php
  2. 200 clients, running 90 sec.
  3. Speed=103998 pages/min, 7422003 bytes/sec.
  4. Requests: 155993 susceed, 4 failed.
  5. %webbench -t 90 -c 300 http://ict.sdcangyuan.com/test/blitz/test.php
  6. 300 clients, running 90 sec.
  7. Speed=103214 pages/min, 7354411 bytes/sec.
  8. Requests: 154808 susceed, 14 failed.
复制代码
2、改为从0-50循环:
  1. %webbench -t 90 -c 300 http://ict.sdcangyuan.com/test/blitz/test.php
  2. 300 clients, running 90 sec.
  3. Speed=114114 pages/min, 3711739 bytes/sec.
  4. Requests: 171164 susceed, 7 failed.
  5. %webbench -t 90 -c 400 http://ict.sdcangyuan.com/test/blitz/test.php
  6. 400 clients, running 90 sec.
  7. Speed=113617 pages/min, 3687560 bytes/sec.
  8. Requests: 170407 susceed, 19 failed.
复制代码
    1.             input        (Total)           output
    2.    packets  errs idrops      bytes    packets  errs      bytes colls drops
    3.        29k     0     0       6.4M        25k     0       9.7M     0     0
    4.        28k     0     0       6.3M        24k     0       9.6M     0     0
    5.        28k     0     0       6.2M        24k     0       9.4M     0     0
    6.        28k     0     0       6.3M        24k     0       9.5M     0     0
    7.        28k     0     0       6.4M        24k     0       9.6M     0     0
    8.        28k     0     0       6.3M        24k     0       9.6M     0     0
    9.        28k     0     0       6.3M        24k     0       9.5M     0     0
    10.        28k     0     0       6.3M        24k     0       9.6M     0     0
    11.        28k     0     0       6.2M        24k     0       9.5M     0     0
    12.        28k     0     0       6.3M        24k     0       9.5M     0     0
    复制代码
  1. ab -c 300 -t 90 http://ict.sdcangyuan.com/test/blitz/test.php





  2. Document Path:          /test/blitz/test.php

  3. Document Length:        1794 bytes

  4.   

  5. Concurrency Level:      100

  6. Time taken for tests:   18.493 seconds

  7. Complete requests:      50000

  8. Failed requests:        0

  9. Write errors:           0

  10. Total transferred:      97800000 bytes

  11. HTML transferred:       89700000 bytes

  12. Requests per second:    2703.68 [#/sec] (mean)

  13. Time per request:       36.987 [ms] (mean)

  14. Time per request:       0.370 [ms] (mean, across all concurrent requests)

  15. Transfer rate:          5164.46 [Kbytes/sec] received
复制代码





二、smarty

1、CPU利用率: 100%, 负载:25左右
  最繁忙的程序是php-fpm
  CPU利用率恢复到0%时,仍然要等近两分钟才能结束测试
  300个连接,webbench会等会长时间也得不到结果。

下面的结果可能出错,因为同样的输出内容,在每分钟11W的时候,流量大约是不到4M,看后台,出现了大量的error,说明已经超出php的计算范围,这个时候应该出现了大量的错误页面:
  1. %webbench -t 90 -c 250 http://ict.sdcangyuan.com/test/smarty/demo/index.php
  2. Webbench - Simple Web Benchmark 1.5
  3. Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

  4. Benchmarking: GET http://ict.sdcangyuan.com/test/smarty/demo/index.php
  5. 250 clients, running 90 sec.

  6. Speed=118555 pages/min, 955586 bytes/sec.
  7. Requests: 177833 susceed, 0 failed.
复制代码
减少并发数,可以看到结果差不多,每分钟1w,每秒在4百k左右:
  1. %webbench -t 90 -c 100  http://ict.sdcangyuan.com/test/smarty/demo/index.phpWebbench - Simple Web Benchmark 1.5Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
  2. Benchmarking: GET http://ict.sdcangyuan.com/test/smarty/demo/index.php100 clients, running 90 sec.
  3. Speed=13425 pages/min, 440285 bytes/sec.Requests: 20138 susceed, 0 failed.
复制代码
继续加到200个并发,同时附上流量信息:

    1. %webbench -t 90 -c 200 http://ict.sdcangyuan.com/test/smarty/demo/index.php
    2. Webbench - Simple Web Benchmark 1.5
    3. Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

    4. Benchmarking: GET http://ict.sdcangyuan.com/test/smarty/demo/index.php
    5. 200 clients, running 90 sec.

    6. Speed=13413 pages/min, 439825 bytes/sec.
    7. Requests: 20120 susceed, 0 failed.
    复制代码
    1.             input        (Total)           output
    2.    packets  errs idrops      bytes    packets  errs      bytes colls drops
    3.       3.5k     0     0       764k       3.3k     0       1.1M     0     0
    4.       3.6k     0     0       782k       3.4k     0       1.2M     0     0
    5.       3.4k     0     0       741k       3.2k     0       1.1M     0     0
    6.       3.5k     0     0       760k       3.3k     0       1.1M     0     0
    7.       3.5k     0     0       768k       3.3k     0       1.1M     0     0
    复制代码

继续加到300并发,坚持了不到1分钟,nginx-error爆满:

    1. %webbench -t 90 -c 300 http://ict.sdcangyuan.com/test/smarty/demo/index.php
    2. Webbench - Simple Web Benchmark 1.5
    3. Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

    4. Benchmarking: GET http://ict.sdcangyuan.com/test/smarty/demo/index.php
    5. 300 clients, running 90 sec.

    6. Speed=123128 pages/min, 979094 bytes/sec.
    7. Requests: 184515 susceed, 178 failed.
    8. %
    复制代码

    1.    packets  errs idrops      bytes    packets  errs      bytes colls drops
    2.        21k     0     0       1.9M        19k     0       2.6M     0     0
    3.        20k     0     0       1.9M        18k     0       2.5M     0     0
    4.        20k     0     0       1.9M        18k     0       2.5M     0     0
    5.        20k     0     0       1.9M        18k     0       2.5M     0     0
    6.        20k     0     0       1.9M        18k     0       2.5M     0     0
    7.        20k     0     0       1.8M        18k     0       2.5M     0     0
    8.        20k     0     0       1.9M        18k     0       2.5M     0     0
    9.        20k     0     0       1.9M        18k     0       2.6M     0     0
    复制代码
  1. ab -c 100 -t 90 http://ict.sdcangyuan.com/test/smarty/demo/index.php


  2. Document Path:          /test/smarty/demo/index.php

  3. Document Length:        1806 bytes

  4.   

  5. Concurrency Level:      100

  6. Time taken for tests:   90.001 seconds

  7. Complete requests:      20336

  8. Failed requests:        0

  9. Write errors:           0

  10. Total transferred:      40021248 bytes

  11. HTML transferred:       36726816 bytes

  12. Requests per second:    225.95 [#/sec] (mean)

  13. Time per request:       442.568 [ms] (mean)

  14. Time per request:       4.426 [ms] (mean, across all concurrent requests)

  15. Transfer rate:          434.26 [Kbytes/sec] received
复制代码





三、php代码输出:

CPU利用率:55%左右
  1. %webbench -t 90 -c 300 http://ict.sdcangyuan.com/test/test.phpWebbench - Simple Web Benchmark 1.5Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
  2. Benchmarking: GET http://ict.sdcangyuan.com/test/test.php300 clients, running 90 sec.
  3. Speed=153972 pages/min, 3984266 bytes/sec.Requests: 230950 susceed, 8 failed.
复制代码

  1.                input        (Total)           output
  2.    packets  errs idrops      bytes    packets  errs      bytes colls drops
  3.        28k     0     0       5.5M        24k     0       7.9M     0     0
  4.        28k     0     0       5.5M        24k     0       7.9M     0     0
  5.        28k     0     0       5.5M        24k     0       7.9M     0     0
  6.        27k     0     0       5.3M        23k     0       7.7M     0     0
  7.        28k     0     0       5.4M        24k     0       7.9M     0     0
  8.        28k     0     0       5.5M        24k     0         8M     0     0
  9.        28k     0     0       5.4M        24k     0       7.9M     0     0
  10.        28k     0     0       5.5M        24k     0       7.9M     0     0
复制代码
  1. ab -c 100 -t 90 http://ict.sdcangyuan.com/test/test.php


  2. Document Path:          /test/test.php

  3. Document Length:        1392 bytes

  4.   

  5. Concurrency Level:      100

  6. Time taken for tests:   15.221 seconds

  7. Complete requests:      50000

  8. Failed requests:        0

  9. Write errors:           0

  10. Total transferred:      77701554 bytes

  11. HTML transferred:       69601392 bytes

  12. Requests per second:    3285.00 [#/sec] (mean)

  13. Time per request:       30.441 [ms] (mean)

  14. Time per request:       0.304 [ms] (mean, across all concurrent requests)

  15. Transfer rate:          4985.35 [Kbytes/sec] received

复制代码





四、结论:


Blitz的速度大约是smarty的10倍,能达到php的直接echo方式的80%左右,性能相当不错了。

但是Blitz的变量值传递非常别扭,必须多一级数组,在数组循环的时候,竟然夸张地需要三级数组!相比来说,smarty的单级数组显得非常简洁和便于理解。
  

五、三种方式的源代码:

注:以上各个测试结果,均有Xcache加速器,下次测试无Xcache时的对比,另外php原生代码如果完全都用变量输出的话,可能还会慢一点:

1、Blitz
   php文件:
  1. <?php
  2.   $t = new Blitz();
  3.   $t->load('{{ include("./test.tpl") }}');
  4.   $arr = array();
  5.   for ( $i = 0 ; $i < 50 ; $i++ ){
  6.     $arr[]['number'] = $i;
  7.    }
  8.   $t->set(array('arr'=>$arr));

  9.   $abc = "This is a Test template!";
  10.   $t->set(array('abc'=>$abc));

  11.   $title = "The Test Page of lsstarboy!";
  12.   $t->set(array('title'=>$title));

  13.   $t->display();
  14. ?>
复制代码
tpl文件:

  1. <html>
  2.   <head>
  3.    <title> {{ $title }} </title>
  4.   <body>
  5.    {{ $abc }} <br>
  6.    {{ BEGIN arr }}
  7.      <p>The number is {{ $number }} ! </p>
  8.      {{ END }}
  9.     <p> This is the end!!</p>
  10.   </body>
  11. </html>
复制代码
2、smarty:
   php文件:

  1. <?php

  2. require('../libs/Smarty.class.php');
  3. $smarty = new Smarty;
  4. $smarty->debugging = false;
  5. $smarty->caching = true;
  6. $smarty->cache_lifetime = 120;

  7. $smarty->assign("title","The Test Page Of lsstarboy");
  8. $smarty->assign("abc","This is a Test template!");

  9. $arr = array();

  10. for( $i=0; $i < 50; $i++ ) {
  11.   $arr[] = $i;
  12. }

  13. $smarty->assign("arr",$arr);

  14. $smarty->display('index.tpl');
  15. ?>
复制代码
tpl文件:
  1. <html>
  2.   <head>
  3.    <title>{$title}</title>
  4.   </head>
  5.   <body>
  6.     {$abc}<br>
  7.      {section name=test loop=$arr}
  8. <p>The number is {$arr[test]} ! </p>
  9.       {/section}
  10.     <p>This is the end!!</p>
  11.    </body>
  12. </html>
复制代码
3、php原生代码:
  1. <?php
  2. echo "<html>\n";
  3. echo "<head>\n";
  4. $title = "The Test Page of lsstarboy!";
  5. echo "<title>$title</title>\n";
  6. echo "</head>\n";
  7. echo "<body>\n";
  8. echo "This is a Test template!";
  9. for ( $i =1 ; $i<50; $i++ ) {
  10.   echo "The number is : " . $i . "!";
  11. }
  12. $abc = "This is the end!";
  13. echo $abc;
  14. echo "</body>\n";
  15. echo "</html>";
  16. ?>
复制代码

----end----

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
2 [报告]
发表于 2012-07-31 17:19 |只看该作者
占位,发不带Xcache的结果:

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
3 [报告]
发表于 2012-07-31 17:20 |只看该作者
再占个位备用,有时间的话,再分析一下discuz的模板,据说速度非常快。

论坛徽章:
0
4 [报告]
发表于 2012-08-01 09:46 |只看该作者
用了smarty就没有动力学习其他的了。除非特别要求性能的,直接用php了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP