您的位置:首页 > 其它

让我迷惑的Smarty模板(编译、缓存)

2011-09-21 23:05 281 查看
说 Smarty 模板好,无非是因为她的编译和缓存机制。

可是编译和缓存机制,又有多少人能够真正理解? 在网上,对 Smarty 充满疑问的也不只是我一个,下面这位朋友的问题就提的很好。

------------------------------------------------------------
楼主: Smarty类的模板在哪些项目中不适宜使用?

看过一个文章说,需要实时更新的项目不宜使用Smarty.

摘原文:
采用smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下)
不适合使用smarty的地方:
1.   需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,这类型的程序使用smarty返而会使模板处理速度变慢。
...

但我有疑问...实时更新的只是数据.为什么smarty不适用于这类项目呢?
因为在下一次访问模板时将WEB请求直接转换到这个非模板技术的PHP文件中,所以就算实时更新也不用重新编译而影速度...
希望大老们指点一下,到底为什么需要实时更新的项目不宜使用Smarty?还有其他哪些项目不宜使用?

1 楼lawyu(雨淋漓)
关注,不清楚这个

2 楼jetxt(擦肩而过)
接到request后,先判断是否第一次请求该url,如果是,将该url所需的模板文件"编译"成php脚本,然后redirect;如果不是,就是说该url的模板已经被"编译"过了,检查不需要重编译后可以马上redirect,重编译条件可以自己设定为固定时限,默认的是模板文件被修改。

3 楼Mark_Feng()
up

4 楼afoskoo(暂停打印)
正如   jetxt(擦肩而过)   所说,模板文件未被修改就不用重编译条件,也就是即使是实时更新,也只是数据,模板文件一直都未改动过.按照这样的说法,即是使需要实时更新的项目也可以使用Smarty啊.

5 楼zairwolfi(君子兰)
jetxt(擦肩而过)   讲的是模板的原理?不过我好像没有看到模板类中有对模板文件是否被修改过进行判断的地方。好像是缓存的?又不是。缓存转向的不是运行后生成的htm么?

重编译的触发,除了固定时限,其他的方法怎么实现?

6 楼zairwolfi(君子兰)
喔,smarty的是这样?smartemplate就不是了吧?

7 楼afoskoo(暂停打印)

smarty可以设置是否生成静态HTML.    smartemplate不曾了解.

8 楼xuzuning(唠叨)

你的疑问很有道理,不过原文的论述也不能说就一定不对。这要得从smarty的工作流程来确定,不能一概而论。
smarty不仅仅是模板处理,他还有一套效率较高的缓存机制。如果不使用缓存机制,那么就不会出现楼主所困惑的问题。但是这样一来,smarty只是替你写了一个可读性很差的混合代码程序,运行速度并不比解释行的模板高很多。

9 楼raid79(山鹰)

学习

10 楼afoskoo(暂停打印)

唠叨大哥可否给一些讲述这方面机制的文章参考参考?

11 楼uuq(杜牧)

smarty如果使用要缓存。
而你的网站数据差不多接近实时更新。这期中缓存机制将是个累赘。
如果又不是实时更新。
看你网站更新速度。
如果有十个人访问才更新一次,可以直接生成静态的。
我总觉得缓存有点像鸡肋。
12 楼zairwolfi(君子兰)

当访问量大的时候,远超过更新速度时,用缓存可以减少好多压力。

13 楼afoskoo(暂停打印)回复于 2005-01-26 08:48:21 得分 0

多谢各位大老支持!

来源: http://topic.csdn.net/t/20050125/15/3752582.html

另一位朋友对 Smarty 编译和缓存的看法

今天看完了Smarty,现在才分清楚,编译是编译,缓存是缓存,静态是静态.对于Smarty的机制今天总算明白了.

Smarty确实很强大,强大到,美工要进行专业的编程类学习可以达到"高境界"的应用,不过..感觉是鸡肋,=_=b

模板编译,这是功能确实非常有趣,它是独立争对模板进行编译的功能!

为什么要编译模板,这里就存在很多的原因了,(效率,跨平台(dom),更大的压缩率,更灵活的输出)当你学过研究过Ajax后,就知道用Smarty编译出来的模板几乎不需要进行nodeType的类型测试,因为已经清除了多余的#text类型.帅呆了.

缓存设置,这外功能就是纯数据的,原以为Smarty是将数据和模板一起编译,谁知还是分离的,所以刚开始有一些迷糊.后来Fidy跟说明了一下才清楚.

来源: http://www.bpsky.net/?action=show&job=articles&tid=203
我的更多文章

【转】ORACLE SQL:经典查询练手(不懂装懂,永世饭桶!) (2011-06-07 13:57:55) 

学习 php 中 try catch (2011-05-19 14:20:30) 

IE6和 W3C 的盒子模型 (2010-06-14 13:44:31) 

Zend Studio for Eclipse 从PHP类生成WSDL文件 (2010-06-04 11:04:19) 

2007-11-07百度笔试题(web开发和新产品搜索方向) (2009-11-17 09:50:44) 

Yahoo! PHP 笔试题 (2009-11-17 09:49:52) 

分享到: 新浪微博 QQ空间 开心网 豆瓣 人人网 twitter fb
0
    
阅读(3338)┊ 评论 (5)收藏(0)举报打印
前一篇:Linux实用命令 - 文件系统操作
[发评论] 评论 重要提示:警惕虚假中奖信息!




chinaunix网友 2010-10-11 14:34
好像的意思是如果你不启用cache 没关系 template_c下的模板不会被重新编译 但是如果启用了cache 因为cache将模板静态化 静态化就意味着数据已经进去了 所以数据更新大泽smarty会不断的处理cache。




chinaunix网友 2009-12-05 11:51
有一点不明白: “而不再进行模板重新编译(在源程序没有改动的情况下)” 与 “例如像股票显示,它需要经常对数据进行更新,导致经常重新编译模板,所以这类型的程序使用Smarty会使模板处理速度变慢。” 这两点似乎有点矛盾,模板编译只是对指定模板(改变时需要重新编译是可以理解的)中的smarty标记进行替换,生成一个php与html混编的文件,其中的smarty标记就变成php标记,如: _tpl_vars['title']; ?> 而数据改变(模板不变)时,也只是这些php标记改变了,为什么还要重新编译?




yangphp 2008-12-25 15:30
smarty缓存是没多大用处了,,现在的网站,,动态更新的太多...如果用insert插入动态模块,,又增加复杂度




chinaunix网友 2007-07-05 11:06
补充,上篇评论出处: http://bk.baidu.com/view/399896.htm




chinaunix网友 2007-07-05 11:05
刚看到一篇文章,解决了我对"缓存"的疑问 3. 缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。 Smarty优点 1. 速度:采用Smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。 2. 编译型:采用Smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下) 3. 缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。 4. 插件技术:Smarty可以自定义插件。插件实际就是一些自定义的函数。 5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。 不适合使用Smarty的地方 1. 需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,导致经常重新编译模板,所以这类型的程序使用Smarty会使模板处理速度变慢。 2. 小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用Smarty会在一定程度上丧失PHP开发迅速的优点。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: