gpt4 book ai didi

smarty模板嵌套之include与fetch性能测试

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章smarty模板嵌套之include与fetch性能测试由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

方法1、使用在父模板中使用{include file="child.tpl"}直接将子模板包含进来 。

  优点:

    1、有利于模块的划分和模板的重用.

    2、嵌套层次不多的时候,模板的结构清晰,一眼过去就知道这个模板的内容和结构.

    3、只需要一个smarty实例就能做完所有的事情,减少系统资源的占用.

  不足:

    1、子模板中的变量可能与父模板的变量发生冲突 。

    2、多重嵌套的时候,变量名冲突的几率增大,为所有的变量赋值的难度也加大.

    3、子模板的可操控性差,例如不能通过设置$cache_id, $compile_id,来得到多个结果.

    4、扩展性差。如果需要添加新的模板的时候需要修改模板,同时还需要修改程序.

方法2、通过$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 。

  。

虽然测试的方法和工具可能不是很好,但是通过这些数据的对比,在实际的应用中到底要采用哪种方法,我想大家应该心里有底了吧.

不足和错误之处还望指出,希望大家能多讨论多交流.

最后此篇关于smarty模板嵌套之include与fetch性能测试的文章就讲到这里了,如果你想了解更多关于smarty模板嵌套之include与fetch性能测试的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com