• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-26) 19次浏览 已收录 0个评论

使用模板时难免要碰到模板嵌套的时候,大家都知道有两种方法可以实现,以下是个人早期的一些使用感受。

方法一、使用在父模板中使用{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实本文来源gaodai#ma#com搞@@代~&码*网/搞gaodaima代码例来实现,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 10000test1.phptest2.phptest3.phptest2/test1test3/test1
15.1785.4426.0971.0509849361.177481653
25.2535.9726.0271.1368741671.147344375
35.2236.0395.9871.1562320511.146276087
45.5335.9976.021.0838604741.08801735
55.5576.3086.031.1351448621.085117869
65.2486.0025.9981.143673781.142911585
75.2115.9336.0031.1385530611.151986183
85.3036.0316.0481.1372807841.140486517
95.2135.9236.0331.1361979671.15729906
总计47.71953.64754.2431.1242272471.136717031
1 2 下一页


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:smarty模板嵌套include与fetch性能测试

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址