Smarty模板引擎如何进行缓存的机制详解
本文主要介绍了Smarty模板引擎缓存机制,结合实例形式分析了Smarty模板引擎缓存机制的原理,开启与使用方法以及相关注意事项,需要的朋友可以参考下。希望对大家有所帮助。
具体如下:
首先说下smarty缓存和编译,这是两个不同的概念,编译默认情况下是启动的,而缓存机制需要人为开启,smarty编译过的文件还是php文件,所以执行的时候还是编译的,如果涉及到数据库,还是要访问数据库的所以开销也不小啦,所以需要smarty缓存来解决!
1.开启全局缓存
$smarty->cache_dir = "/caches/"; //缓存目录 $smarty->caching = true; //开启缓存,为flase的时侯缓存无效 $smarty->cache_lifetime = 3600; //缓存时间
2.一个页面使用多个缓存
如:一个文章模板页面会生成多个文章页面,当然是缓存成很多页面,实现起来很简单,只要在display()方法设置第二个参数,指定唯一标识符即可。如下php代码:
$smarty->display('index.tpl',$_GET["article_id"]);
如上,通过第二个参数文章的id缓存一个文章页面。
3.为缓存减小开销
也就是说,已经缓存的页面无需进行数据库的操作处理了,可通过is_cached()方法判断!
if(!$smarty->is_cached('index.tpl')){ //调用数据库 } $smarty->display('index.tpl');
4.清除缓存
一般在开发过程中是不开启缓存的,因为在缓存时间内输出结果不变,但是在应用过程中开启缓存能大大提高web性能,清除缓存方法如下:
clear_all_cache();//清除所有缓存 clear_cache('index.tpl');//清除index.tpl的缓存 clear_cache('index.tpl',cache_id);//清除指定id的缓存
5.关闭局部缓存
如果一个页面中一部分缓存,而另一部分不需要缓存,就可以这样做,比如说显示用户登录的名称就需要关闭缓存,smarty提供了如下三种解决方法:
(1)使用insert模板的一部分不被缓存
定义一个inser标签要使用的处理函数,函数名格式为:insert_xx(array $params, object &$smarty)其中的xx是insert的name,也就是说,如果你定义的函数为insert_abc,则模板中使用方法为{insert name=abc}
参数通过$params传入
也可以做成insert插件,文件名命名为:insert.xx.php,函数命名为:smarty_insert_aa($params,&$smarty),xx定义同上
(2)$smarty->register_block($params, &$smarty)使整篇页面中的某一块不被缓存
定义一个block:
smarty_block_name($params,$content, &$smarty){return $content;} //name表示区域名
注册block:
$smarty->register_block(name, smarty_block_name, false); //第三参数false表示该区域不被缓存
模板写法:
{name}内容 {/name}
写成block插件:
第一步:定义一件插件函数:block.cacheless.php,放在smarty的 plugins目录
block.cacheless.php的内容如下:
<?php function smarty_block_cacheless($param, $content, &$smarty) { return $content; } ?>
第二步:编写程序及模板
示例程序:testCacheLess.php
<?php include(Smarty.class.php); $smarty = new Smarty; $smarty->caching=true; $smarty->cache_lifetime = 6; $smarty->display(cache.tpl); ?>
所用的模板:cache.tpl
已经缓存的:{$smarty.now}<br> {cacheless} 没有缓存的:{$smarty.now} {/cacheless}
现在运行一下,发现是不起作用的,两行内容都被缓存了
第三步:改写Smarty_Compiler.class.php(注:该文件很重要,请先备份,以在必要时恢复)
查找:
复制代码 代码如下:
$this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);
修改成:
if($tag_command == cacheless) $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, false); else $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);
你也可以直接将原句的最后一个参数改成false,即关闭默认缓存。
(3)使用register_function阻止插件从缓存中输出
index.tpl:
<p>{current_time}{/p} index.php: function smarty_function_current_time($params, &$smarty){ return date("Y-m-d H:m:s"); } $smarty=new smarty(); $smarty->caching = true; $smarty->register_function('current_time','smarty_function_current_time',false); if(!$smarty->is_cached()){ ....... } $smarty->display('index.tpl');
注解:
定义一个函数,函数名格式为:smarty_type_name($params, &$smarty)
type为function
name为用户自定义标签名称,在这里是{current_time}
两个参数是必须的,即使在函数中没有使用也要写上。两个参数的功能同上。
相关推荐:
以上是Smarty模板引擎如何进行缓存的机制详解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python是一种多功能的编程语言,在数据分析和机器学习领域广受欢迎。其简洁性、可读性和丰富的库使其成为处理复杂数据任务的理想选择。其中一个强大的应用是RFM分析,这是一种在营销中根据客户购买行为进行分割的技术。在本教程中,我们将通过使用Python来实施RFM分析的过程来指导您。我们将从解释RFM分析的概念及其在营销中的重要性开始。然后,我们将逐步深入探讨使用Python进行RFM分析的实际方面。在文章的下一部分中,我们将演示如何使用Python为每个客户计算RFM分数,考虑到为最近性、频率和

近日,《黑神话:悟空》在全球范围内都引发了巨大的关注,各平台的同时在线人数都再创新高,这款游戏在多个平台取得了巨大的商业成功。《黑神话:悟空》的Xbox版延期虽然《黑神话:悟空》已于PC和PS5平台发布,但其Xbox版一直没有确切消息。据了解,官方已确认《黑神话:悟空》将登陆Xbox平台。但具体上线日期尚未公布。最近有消息称,Xbox版的延期是由于技术问题所致。据相关博主透露,他在Gamescom期间与开发人员和"Xbox内部人士"的交流中得知,《黑神话:悟空》的Xbox版存

哈医大临床药学就业前景如何尽管全国就业形势不容乐观,但药科类毕业生仍然有着良好的就业前景。总体来看,药科类毕业生的供给量少于需求量,各医药公司和制药厂是吸纳这类毕业生的主要渠道,制药行业对人才的需求也在稳步增长。据介绍,近几年药物制剂、天然药物化学等专业的研究生供需比甚至达到1∶10。临床药学专业就业方向:临床医学专业学生毕业后可在医疗卫生单位、医学科研等部门从事医疗及预防、医学科研等方面的工作。就业岗位:医药代表、医药销售代表、销售代表、销售经理、区域销售经理、招商经理、产品经理、产品专员、护

现如今,网站的开发离不了一个重要的组成部分——模板引擎。模板引擎是指一种将页面模板和数据结合起来生成具有特定格式的html代码的工具。在各种网站开发框架中,模板引擎是一个必不可少的组件,因为模板引擎可以大量减少代码的重复性和提高页面的动态性。其中一种最常见和流行的模板引擎是Smarty。Smarty是一个基于PHP语言开发的DSL(DomainSpecif

在现代web开发中,前后端分离已经成为了一个非常流行的趋势,它能够让开发者们更好地组织项目并且提高了项目开发的效率。PHP和Smarty是两个非常常用的技术,它们可以用来实现前后端分离的开发方式。本文将会介绍如何使用PHP和Smarty来实现前后端分离开发。什么是前后端分离开发在传统的web开发中,前端主要负责页面的呈现以及与后端交互的逻辑。后端则主要负责业

作为一名PHP开发者,使用模板引擎是理所当然的选择。Smarty是一种流行的模板引擎,它提供了一种将HTML/CSS/JavaScript与PHP代码分离的方式,使开发人员能够更好地组织和管理项目。在本文中,我们将学习在PHP开发过程中如何使用Smarty模板引擎。一、安装Smarty在之前,我们必须安装Smarty。在本文中,我们将使用Composer安装

PHP是一种强大的服务器端脚本语言,可以用于开发Web应用程序。在Web开发的早期阶段,程序员们使用了很多HTML和JavaScript代码来开发Web应用程序。但是,这种方法很难维护和管理,因为HTML和JavaScript代码可能会变得非常复杂。为了解决这个问题,Smarty模板引擎被创建出来。Smarty是一种基于PHP开发的模板引擎,用于管理和生成W

最近有小伙伴反应win10镜像文件该如何下载,因为市面的镜像文件多如牛毛,想找到正规的文件下载,这可怎么办呢?今天小编带来了下载镜像的链接,详细的解决步骤,具体的一起来看看吧。win10镜像快速下载安装教程下载链接>>>系统之家Ghostwin101909镜像64位版v2019.11<<<>>>Win10镜像64位v2019.07<<<>>>Win10镜像32位v2019.07<<<1、通过网络检索
