0

0

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

php中文网

php中文网

发布时间:2016-05-17 09:22:22

|

1197人浏览过

|

来源于php中文网

原创

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

  优点:

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

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

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

  不足:

AlibabaWOOD
AlibabaWOOD

阿里巴巴打造的多元电商视频智能创作平台

下载

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

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

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

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

方法二、通过$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.124124227247 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

 

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

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

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

19

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

27

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

15

2026.02.03

c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

3

2026.02.03

漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

13

2026.02.03

Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

114

2026.02.03

Java 设计模式与重构实践
Java 设计模式与重构实践

本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

3

2026.02.03

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2

2026.02.03

Python 强化学习与深度Q网络(DQN)
Python 强化学习与深度Q网络(DQN)

本专题深入讲解 Python 在强化学习(Reinforcement Learning)中的应用,重点介绍 深度Q网络(DQN) 及其实现方法,涵盖 Q-learning 算法、深度学习与神经网络的结合、环境模拟与奖励机制设计、探索与利用的平衡等。通过构建一个简单的游戏AI,帮助学习者掌握 如何使用 Python 训练智能体在动态环境中作出决策。

3

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
后盾网smaryt模板引擎视频教程
后盾网smaryt模板引擎视频教程

共14课时 | 2.6万人学习

smarty完全中文手册
smarty完全中文手册

共0课时 | 0人学习

Smarty3.0模板引擎使用指南
Smarty3.0模板引擎使用指南

共11课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号