三、可能遇到的问题

在SMARTY的 官方网站上,有详尽的用户手册,可以选择在线HTML和PDF格式的版本。这里就不再涉及手册上已有的内容,只是把初次使用可能遇到的问题做个解释。

第一个问题就很要命:提示说找不到所需文件?并不是每一个人都按照SMARTY默认目录结构来写应用的。这里需要手工指定,假设目录结构如下:

就需要在index.php里指定目录结构:

$smart->template_dir = "smarty/templates/";

$smart->compile_dir = "smarty/templates_c/";

$smart->config_dir = "smarty/configs/";

$smart->cache_dir = "smarty/cache/";

第一个问题解决了,紧接着就是第二个:我刚用Dreamweaver生成的漂亮模板怎么不能用?并不是模板文件有什么问题,而是因为SMARTY默认的标记分隔符是{},不巧的是Javascript肯定包含这个标记。好在我们可以用任意字符当作分隔符,再加上这两句:

$smart->left_delimiter = "{/";

$smart->right_delimiter = "/}";

这下安装就基本完成,没问题了。

四、反衬和类比

先构思一下对测试的设计。主要的评比因素当然是速度了。为了进行速度测试,采取了算术平均数的作法。在测试页面中重复将页面生成N遍,再对比总页面生成时间。另一个重要因素是易用性(至于扩展性不用比较已经有结果了),所以使用的模板不能太小。我用的是我个人主页的的页面,一个用Firework+Dreamweaver生成的HTML文件,大小约7K。其中的变量设置也采取最常用的区块,在PHPLIB template里叫block,而SMARTY则称section。别小看这称呼的不同,易用性标准分两块:模板文件和脚本文件的语法是否简明易用。

下面就深入到测试中来。先看看两种模板文件的语法:蓝条左边是PHPLIB template的模板,右边属于SMARTY。个人偏好是不一样的,所以这里不作评论。着重对比一下脚本里的处理语句,先看PHPLIB template的:

$tpl->set_file('phplib', 'bigfile.htm');

$tpl->set_block('phplib', 'row', 'rows');

for ($j = 0; $j < 10; $j++){

$tpl->set_var('tag' ,"$j");

$tpl->parse('rows', 'row', true);

}

$tpl->parse('out', 'phplib');

$tpl->p('out');

下面是SMARTY的:

$smart->assign('row',$row);

$smart->display('bigfile.htm');

SMARTY只用了tags和row两个变量,而PHPLIB template则多了模板文件的handler,还有一个莫名其妙的out。说实在的这个out我当初学的时候就不知道为什么要存在,现在看起来,还是别扭。为什么SMARTY少那么多处理语句呢?答案是工作由引擎完成了。如果你喜欢钻研源程序,可以发现在Smarty_compiler.class.php里有一个名叫_compile_tag()的函数,由它负责把section这个标签转换成php语句。这不是一个普通的标签,它带有参数和数据,节省了脚本编程的工作量,而模板标签上的工作量相差又不大,可以判定在易用性上SMARTY高出一畴。

下面该轮到我们最关注的速度了,毕竟对于一个熟练的web开发者来说,掌握再困难的工具不过是时间问题,何况模板引擎这种学习曲线平缓的技术。而速度则是web应用程序的生命,尤其是模板引擎使用在并发访问量很大的站点上,这点就更重要了。测试开始前,我觉得PHPLIB template会在这一环节上胜出,因为它经历了很多次升级,已经基本没有什么bug,而且SMARTY的引擎个头太大,不像它的对手只有两个文件。

果然,测试结果如下图,PHPLIB template有25%的速度优势:

但不会一直这样,我又按了一次刷新,这次得到了不一样的结果:

PHPLIB基本没变化,但是SMARTY提高了25%的速度。继续刷新,得到的都是类似于第二次的结果:SMARTY比PHPLIB template 快上近10%。我想这就是编译型比解释型快的原理了。SMARTY引擎本身就很大,加上还要把模板编译成php文件,速度当然比不上小巧的PHPLIB template。但这只是第一次的情况。第二次接到请求的时候,SMARTY发现该模板已经被编译过了,于是最耗时的一步被跳过了,而对手还要按部就班地进行查找和替换工作。这是编译原理里讲到的很经典的"用空间换时间"例子。

五、结论

结论就是如果你已经爱上SMARTY了,那么还等什么呢?当然并不是说它就全能,就如同我用MVC模式来写我的个人网站,非但没有减少工作量,反而总是要为不同层次间的耦合劳神。

SMARTY不适合什么呢?举个手册里的经典例子:天气预报网站。我还想到一个:股市大盘。在这种网站上用SMARTY会由于经常的重编译而效率偏低,还是PHPLIB template更为适合。

本文并不是为了对比两种引擎,而是为了说明SMARTY的优势。使用它最有意义之处在于它是PHP新体系的一部份,作为一支独立的力量,除了.NET和JAVA ONE这两大体系之外,大中型web开发还有别的选择。这对于GNU项目来说,其意义无异于刘邓大军千里跃进大别山。

◎进入论坛网络编程版块参加讨论

php模板引擎smarty,[PHP]模板引擎Smarty介绍相关推荐

  1. php模板怎么导入数据类型,smarty模板引擎之分配数据类型,smarty模板数据类型_PHP教程...

    smarty模板引擎之分配数据类型,smarty模板数据类型 本文实例讲述了smarty模板引擎之分配数据类型用法.分享给大家供大家参考.具体分析如下: 一.分配基本数据 //分配基本数据 $smar ...

  2. PHP模板引擎Smarty(一)Smarty下载、配置、一个最简单的应用示例

    一.概述 Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一.它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码 ...

  3. php中smarty末班引擎,PHP使用smarty模板引擎

    Smarty是一个使用PHP写出来的模板引擎,目的是分离php代码和html代码.是一个编译型模板引擎. 安装 (1)下载Smarty, (2)在web服务器文档根目录新建一个smarty/文件夹, ...

  4. php模板技术smarty,PHP模板技术Smarty

    基本信息 讲师: 高洛峰 时长:60分钟 集数:9 每集定价:20 元 描述: 如果你正在设计一个交互式的网站,你一定会关注两个主要的问题,就是界面美工和应用程序.在大多数的项目组中,开发一个Web程 ...

  5. php 视图层smarty,4. 视图引擎 View Engine - Smarty

    帮助我们实现View的开发. 好的视图引擎: 模板更加贴近标准的html 语法简单易懂 良好的缓存机制 扩展性良好 网络资源多 现在市面上有Smarty和PHPLIB.我们将就Smarty进行深入了解 ...

  6. php smarty加载失败,smarty模板无法加载如何解决?

    相同的模板,但是test.php可以加载,运行后出结果,但是使用与test.php同一个路径下的commetn.php确提示无法加载模板comment.tpl,请问如何解决?谢谢. 文件路径截图: s ...

  7. php模板使用教程,TMDPHP 模板引擎使用教程_php模板_脚本之家

    在讲解tmd_tpl的使用方法之前,我要先讲讲为什么要重新发明这个轮子.那我们要从这世界上所谓的PHP模板引擎都为大家做了哪些贡献说起 在PHP界谈模板引擎,必不可免的要拿Smarty开刀, 这个无比 ...

  8. 由浅入深:自己动手开发模板引擎——解释型模板引擎

    受到群里兄弟们的竭力邀请,老陈终于决定来分享一下.NET下的模板引擎开发技术.本系列文章将会带您由浅入深的全面认识模板引擎的概念.设计.分析和实战应用,一步一步的带您开发出完全属于自己的模板引擎.关于 ...

  9. 由浅入深:自己动手开发模板引擎——置换型模板引擎(四)

    受到群里兄弟们的竭力邀请,老陈终于决定来分享一下.NET下的模板引擎开发技术.本系列文章将会带您由浅入深的全面认识模板引擎的概念.设计.分析和实战应用,一步一步的带您开发出完全属于自己的模板引擎.关于 ...

最新文章

  1. Phabricator是什么,代码审查工具
  2. 实战:使用OpenCV+Python+dlib为人脸生成口罩
  3. php soap模块的安装
  4. 基于labview的温湿度数据采集_【零偏原创】基于FPGA的多路SPI接口并行数据采集系统...
  5. python 扫盲系列(1)
  6. centos8 挂载ntfs_CentOS 8 挂载NTFS系统磁盘方案
  7. 卢伟冰暗示Redmi K40轻奢版:搭载联发科天玑1100
  8. 空间复杂度怎么算_西餐厅主题餐饮空间设计装修预算怎么算?-雨川
  9. Codeforces Round #110 (Div. 2)
  10. 4S店销售顾问有福了,小帮软件解决“二次录入”难题--二次录入
  11. winform基础 C#编程
  12. Python爬虫获取PPT模板
  13. GAMIT基线解算(批处理步骤)
  14. 服务器使用笔记本网络连接外网
  15. 50篇各种磨皮大法PS教程集合,想学磨皮方法的可以看看
  16. 【养生之道】男人养生的秘诀
  17. 天猫菜鸟强势宣布!春节不休,年货照常买照常送!
  18. Django2.0+小程序技术打造微信小程序助手百度云
  19. 安装Cartopy报错 Proj4 version 0.0.0 is installed, but cartopy requir
  20. BUUCTF Reverse前五题解题记录

热门文章

  1. python绘制多条不同x轴曲线_python matlibplot绘制多条曲线图
  2. 论网络安全(观直播后感)
  3. Linux查看显示编辑文本文件
  4. oracle 字符串 回车,如何去掉字符串中的回车键
  5. 电脑太慢了最简单的办法怎么弄_电脑感染病毒的10种症状及简单处理办法 电脑中病毒的症状介绍...
  6. web前端基础(11html5和css)
  7. python类的属性打印_python 打印类的属性、方法
  8. html盒子阴影效果,CSS3给div或者文字添加阴影(盒子阴影、文本阴影的使用)
  9. 免堆期由谁申请_谈谈离婚冷静期
  10. Unity Cinemachine智能相机教程(五):VirtualCamera的Extension扩展