首页 后端开发 php教程 Smarty的配置与高级缓存技术分享_PHP教程

Smarty的配置与高级缓存技术分享_PHP教程

Jul 21, 2016 pm 03:19 PM
php smarty 分享 前言 引擎 技术 模板 缓存 配置 高级

前言

Smarty 是一个出色的PHP模板引擎,它分离了逻辑代码和user interface。

学习和使用Smarty,没有应用到它的缓存技术是一个很大的损失,它可以将用户最终看到的HMTL文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件,给后台服务器减少很多负担。

下载与配置

官方下载:Smarty Download

下载完后,解压到自己项目的文件目录下。

复制代码 代码如下:

require('../libs/Smarty.class.php');
$smarty = new Smarty;
//$smarty->force_compile = true; //强迫编译
$smarty->debugging = true; //调试
$smarty->caching = true; //开启缓存
$smarty->cache_lifetime = 120; //缓存存活时间(秒)

$smarty->cache_dir = MY_SMARTY_DIR . '/cache/' ; //设置缓存的存放路径

注意:如果你发现缓存文件每次浏览都会发生改变,请看 Smarty的 force_compile , 它会强迫Smarty每次调用(重新)编译模板。这项设置不受$compile_check的限制。默认情况下,它是无效的。它对于开发和调试很方便.但它决不能使用于产品环境下.如果启动了缓存,每次将会重新生成缓存文件.

$smarty->force_compile = false; //强迫编译

Smarty 缓存技术

全局缓存
局部缓存
insert 法
动态 block 法
插件 block 法

全局缓存技术

顾名思义,全局缓存就是把整个页面生成缓存文件,指定该缓存文件的存活时间,在指定时间内再次浏览整个页面,将直接读取缓存文件。
复制代码 代码如下:

$smarty->caching = true; //开启缓存
$smarty->cache_lifetime = 120; //缓存存活时间(秒)


注意:一个模板只能有一个缓存文件,如果您的模板存在多个页面的话,就要为缓存 设置一个ID。 例如一个页面有多个文章:

http://website/index.php?p=1
http://website/index.php?p=2
复制代码 代码如下:

//$_SERVER['REQUEST_URI']方法
//将当前页面的URL(包含?后面的所有参数)进行md5加密
$url=md5($_SERVER['REQUEST_URI']);
//设置缓存文件名
$smarty->display('index.tpl',$url);


重点:使用缓存技术,很大一个原因就是为了减少对数据库的读写,所以我们要用$smarty->isCached('index.tpl')来判断缓存是否存在,如果存在了就不要再次操作数据库。
复制代码 代码如下:

if(!$smarty->isCached('index.tpl')){
echo "ACACHE NO FOUND!";
$sql = "SELECT * FROM test";
$query = mysql_query($sql);
$row = mysql_fetch_row($query);
$smarty->assign("loaddatabase",$row[1]);
}

这里又有问题了,如果我改了数据库的某个内容,想更新显示内容,但是缓存又还没到消亡时间,那该肿么办呢?
$smarty->clearCache("index.tpl");
上面的clearCache可以解决这个问题,只要更新了数据后,调用clearCache清除一下缓存就可以了。

PS:我用的是Smarty3版本,这个版本很多方法的命名都发生变化了,如果是Smarty2的话会出现“Call of unknown method ‘isCached'.”,请使用$smarty->is_cached()。
后面出现的 Smarty3:registerPlugin(), Smarty2:register_block() 也一样是版本的问题。

下面我们来看一下有缓存和没缓存的速度比较:
1.首次浏览,没有缓存 Total Time 0.01421

2.第2次浏览,有缓存 Total Time 0.00308

这里我的index.php里只有几行代码,如果数据量大的话,就有明显的区别。

局部缓存技术

局部缓存 = 部分缓存, 就是一个页面的缓存中,并不是全都生成缓存,可以自定义设置某个功能模块不生成缓存,每次浏览都会更新数据;

例如:网页显示用户的状态、网页的统计数据、广告条等,这些数据的更新速度都非常快,不宜缓存,这样,局部缓存便有用武之地了。

局部缓存有3个方法:

一、insert法

insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数.

使用方法:

注意这里的函数名一定要以insert开头,模板中的name与之对应。

index.php
复制代码 代码如下:

//定义一个时间来测试insert与普通assign的差别
$date = date("Y-m-d H:i:s");
$smarty->assign("date", $date);
//insert
function insert_get_current_time($date){
return date("Y-m-d H:i:s");
}

index.tpl
复制代码 代码如下:

nocache:{insert name="get_current_time"}
cache: {$date}
[code]
然后看生成的缓存文件:得出结论 insert 每次调用该模板都会重新执行该函数

nocache:),$_smarty_tpl);?>

cache: 2012-06-04 15:46:52
复制代码 代码如下:


这种方法简单,但是如果要显示的内容是一大块的,就不宜使用了。

二、动态block 法

php中自定义块
index.php
[code]
//smarty 3
// function declaration
function smarty_block_nocache ($param,$content,$smarty)
{
return $content;
}
// register with smarty
$smarty->registerPlugin("function","nocache", "smarty_block_nocache");

开始有提到过,Smarty3是用registerPlugin , Smarty2则是用register_block

index.tpl

{nocache}{$date}{/nocache}
然后看缓存文件 , 得出结论每次调用该模板都会重新执行$date
[/code]
tpl_vars['date']->value;?>
复制代码 代码如下:

三、插件block 法

这个方法和第2个差不多,只是把php中的自定义块,放到smarty目录中的plugins文件夹中。

在Smarty/plugins目录下建一个文件 block.nocache.php 内容如下:

function smarty_block_nocache($param, $content, $smarty)
{
return $content;
}
?>
[code]
tpl模板中的使用和第二个方法一样

总结
可以总结出Smarty缓存技术,能大大的提高网站的速度和质量,用法也比较简单。

最后提醒一下的就是, Smarty生成的缓存文件的扩展名虽然是php,但并不会被当作php代码来解析.

作者:那瞬间

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/325393.htmlTechArticle前言 Smarty 是一个出色的PHP模板引擎,它分离了逻辑代码和user interface。 学习和使用Smarty,没有应用到它的缓存技术是一个很大的损失,它...
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? 什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP与Python:了解差异 PHP与Python:了解差异 Apr 11, 2025 am 12:15 AM

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

See all articles