Smarty 有个问题一直相求解一下?

#1 活着的生人

Smarty 有个问题一直相求解一下:

$mTest = spClass("m_test");                                // 1、加载 模型(m_test.php),并且进行实例化
$this->Smarty_test = $mTest>findAll();                // 2、从数据库中获取数据,并保存在 变量Smarty_test 中
$smarty = $this->getView();                                 // 3、获取模板引擎实例(问题:这一步不是很明白,具体有什么作用?)
$smarty->caching = true;                                     // 4、开启Smarty缓存
$smarty->cache_lifetime = 3600;                           // 5、设置Smarty缓存时间
$this->display('test.html');                                    // 6、Smarty模板文件地址

问题一:第3步骤中括号中的问题?
问题二:假设 test.html 页面已经被缓存,并没有超过缓存时间,此时进行再次访问。
据我所知,程序代码是从上到下,进行一行行进行解析。那么 程序还会进行第2步骤(从数据库获取数据)吗?程序大概是符合判别的?请高手指点!!!

该贴已经同步到 活着的生人的微博

2012-01-22 15:21:06

#2 jake

问题1,获取实例是为了后面的代码,如果没有获取实例,那么怎么对实例操作呢?

问题2,在上面的程序里面,正如你所料,第二次执行的时候,读取数据库之类的操作还是会被重新执行(这是因为从上而下执行的),只是因为模板被缓存了,所以模板在缓存时间内,不会接收新数据,也就仍然是原来的数据。

要使用缓存来跳过访问数据库,有两个方案,一是使用spCache(看手册介绍),二是在访问数据库前,先通过smarty实例检查一下该模板有没有被缓存,如无则执行读取数据库和缓存模板操作,有则直接显示模板。

2012-01-23 16:37:46

#3 活着的生人

“先通过smarty实例检查一下该模板有没有被缓存”,这个具体代码是怎样的?

$mTest = spClass("m_test");                                // 1、加载 模型(m_test.php),并且进行实例化
$this->Smarty_test = $mTest>findAll();                // 2、从数据库中获取数据,并保存在 变量Smarty_test 中
$smarty = $this->getView();                                 // 3、获取模板引擎实例(问题:这一步不是很明白,具体有什么作用?)
$smarty->caching = true;                                     // 4、开启Smarty缓存
$smarty->cache_lifetime = 3600;                           // 5、设置Smarty缓存时间
$this->display('test.html');                                    // 6、Smarty模板文件地址

这个例子中如何改?
求教,老大??

2012-01-23 18:11:56

#4 jake

smarty官方手册上有清楚的说明
http://www.smarty.net/docs/en/api.is.cached.tpl

2012-01-23 20:23:45

#5 活着的生人

回复 4 jake


我对这个框架的运用有进了一步,由于接触php时间不长,再弱弱的问一个问题:Smarty缓存和spCache缓存,如何选择哪种技术进行自己的项目缓存技术,在怎样的情况下,哪种更具有优势?
请jake老大指定?!

2012-01-23 21:26:49

#6 jake

smarty缓存是模板缓存,spCache是数据缓存。可以一起用,不是相互斥的技术。

smarty模板缓存适用于模板不频繁修改,并且页面内容也经常不变动,但是页面显示次数比较多的情况,类似静态页面的道理。

spCache缓存,主要针对复杂查询,比如说很复杂的一条SQL查询语句(如包含子查询等),或者因为逻辑而无法使用索引查询的SQL语句(比如说模糊查找)。

2012-01-23 23:31:43

#7 活着的生人

回复 6 jake

多谢jake老大指教,大过年还能为我解答疑问,多谢了:handshake!

2012-01-24 12:25:39