热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

smarty缓存原理讲解(php缓存篇)

smarty(模板引擎,模板技术)使用smarty主要是为了实现逻辑和外在内容的分离;特点:1、速度快
smarty(模板引擎,模板技术)

使用smarty主要是为了实现逻辑和外在内容的分离;



特点:

1、速度快(因为第二次执行的时候使用第一次执行时生成的编译文件)

2、缓存技术(正是因为缓存技术,使得smarty模板技术不太适合那些对于实时性更新要求比较高的,比如股票信息)

3、插件技术

4、缓存技术

5、语句自由静态页面技术实际上是以空间换时间的技术:



http://localhost/news.php?id=8比如这个是某门户网站的新闻页面,



很多人访问,每次都要去数据库里查询,可以再第一次访问的时候生成一个html页面,以后的访问者都是访问这个静态页面)

数据库--->静态页面

分析模板技术:是利用php语言读取模板文件完成字符串替换掉的过程

详解代码如下:

html页面:

{id}

{name}

{age}

后台逻辑部分
//
$id=8;
$name='zhangsan';
$age = 12;$str = file_get_contents('demo1.html');//模板文件的所有内容
$str = str_replace('{id}', $id, $str);//替换id
$str = str_replace('{name}', $name, $str);
$str = str_replace('{age}', $age, $str);
echo $str;


面向对象技术实现模板功能的封装

class Template
{//属性public $vars; //保存要替换的标记和数据的内容public $left_delimiter = '{*'; //左分隔符public $right_delimiter = '*}'; //右分隔符//方法public function assign($key,$value){$this->vars[$key] = $value;}public function display($file) //file表示模板名{$str = file_get_contents($file); //从模板中读取多有内容,并将内容放入$str中foreach ($this->vars as $key => $value) //$key 键名(模板标记) $value 值{$str = str_replace($this->left_delimiter.$key.$this->right_delimiter, $value, $str);}echo $str;//file_put_contents('bak.html', $str);}
}
?>


注意:assign(‘name’,’zhangsan’);这句的时候其实还没有进行数据替换,而是把传入的数据保存在vars[]中,当display的时候才进行数据替换



smarty的处理过程:



1、 smarty将php源文件,首先编译成中间文件

2、 如果启用缓存,再根据编译文件生成缓存文件

3、 之后每次访问都会访问编译文件



如果启用缓存文件而且有缓存文件并且缓存文件没有过期,则直接访问缓存文件

(先不考虑缓存的时候的流程)

编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译

(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)

读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快


第一次请求demo.php时候编译,产生编译文件,在编译文件里

第二次请求demo.php的时候,判断模板文件是否改变,如果模板文件已改变,那么去读取模板文件,然后再编译,如果没有改变,则去读取编译文件,编译文件最终输出;

缓存默认是关闭的;缓存是把数据彻底的存在缓存文件里,直到缓存文件过期才会重新来缓存;所以说smarty在一些实时性特别强的网站里不是特别合适;


重新编译的标准
if(!file_exists(com_aa.php)||filetime(aa.tpl)>filetime(com_aa.php))

缓存的配置
$smarty->cache_dir="/caches/";//缓存目录
$smarty->caching=true;//开启缓存,为flase的时候缓存无效
$smarty->cache_lifetime=60;//缓存时间(单位 秒)

缓存的使用
$smarty->display('模板文件',缓存id);//创建带ID的缓存
$smarty->clear_all_cache();//清除所有缓存
$smarty->clear_cache('模板文件');//清除指定模板文件的缓存
$smarty->clear_cache('模板文件',缓存id);//清除指定id的缓存



第一种缓存
生成的编译文件是templates_c目录下的动态页面文件,实际上就是一个php文件
例如:com_aa.php

第二种缓存
生成的编译文件是caches目录下的静态页面文件,实际上是一个html静态文件

模板文件发生变化的话,两种缓存模式都会重新编译,致使编译文件改变;
assign进模板文件的标签标量的值发生变化的话,静态页面缓存内容在缓存期内不会改变

局部缓存:一个模板文件一部分缓存,另外一部分数据实时更新。
insert函数类似于include函数,不同之处是insert所包含的内容不会被缓存,每次调用该模板都会
重新执行该函数。
cache1.tpl
//写在模板文件中的代码
{insert name="mytime"}


推荐阅读
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 本文详细介绍了如何在 MySQL 中授予和撤销用户权限。包括创建用户、赋予不同级别的权限(如表级、数据库级、服务器级)、使权限生效、查看用户权限以及撤销权限的方法。此外,还提供了常见错误及其解决方法。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 本文详细介绍了 phpMyAdmin 的安装与配置方法,适用于多个版本的 phpMyAdmin。通过本教程,您将掌握从下载到部署的完整流程,并了解如何根据不同的环境进行必要的配置调整。 ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
  • 本文探讨了在使用Selenium进行自动化测试时,由于webdriver对象实例化位置不同而导致浏览器闪退的问题,并提供了详细的代码示例和解决方案。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • MySQL InnoDB Double Write机制详解
    本文深入探讨了MySQL InnoDB存储引擎的Double Write技术,该技术通过在内存和磁盘上创建数据页的副本,确保了部分写失效(Partial Page Write)情况下的数据完整性和可靠性。同时,文章介绍了InnoDB以页为单位进行读取和更新的机制,并详细解析了Double Write的工作原理。 ... [详细]
  • 微信小程序:授权登录与手机号绑定
    本文详细介绍了微信小程序中用户授权登录及绑定手机号的流程,结合官方指引和实际开发经验,提供了一套完整的实现方案,帮助开发者更好地理解和应用。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 本文详细比较了CSS选择器和XPath在Selenium中通过页面结构定位元素的优劣,并提供了具体的代码示例,帮助读者理解两者在不同场景下的适用性。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
author-avatar
xo麦先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有