1. 编译

把模板文件中的变量,函数用正式表达式替换成php变量,并把替换后的内容保存到编译文件里

实现代码:compile函数

2. 缓存

如果开启了缓存,并且缓存文件不存在或缓存文件存在但是缓存文件修改时间小于编译文件修改时间,则包含编译文件,并把把内容保存到缓存文件里头,否则包含缓存文件

实现代码:cache函数

git代码:https://gitlab.com/mzc/miniSmarty

以下为具体实现类:

<?php
class miniSmarty
{public $tpl_vars = array();public $templates =  "./templates/";public $templates_c =  "./templates_c/";public $cache =  "./cache/";public $caching =  false;public function assign($var,$value=null){if(!empty($var)){$this->tpl_vars[$var] = $value;}else{exit("分配的变量名称不能为空");}}public function display($templateName){$templateFile = $this->templates.$templateName;if(!file_exists($templateFile)){exit("模板文件不存在");}else{$compileFile = $this->templates_c.$templateName.'.php';if(!file_exists($compileFile)||(file_exists($compileFile)&&filemtime($compileFile)<filemtime($templateFile))){$this->compile($templateFile, $compileFile);}$this->cacheFile($templateName, $compileFile);}}public function compile($templateFile,$compileFile){$templateContent = file_get_contents($templateFile);$pattern = array('/\{\s*\$([a-zA-Z_][a-zA-Z0-9_]*)\s*\}/');$replace = array('<?php echo $this->tpl_vars["${1}"]?>');$newContent = preg_replace($pattern, $replace, $templateContent);if(!file_put_contents($compileFile,$newContent)){exit("编译模板文件出错");}}public function cacheFile($templateName,$compileFile){if($this->caching){$cacheFile = $this->cache.md5($templateName).$templateName."html";if(!file_exists($cacheFile)||filemtime($cacheFile)<filemtime($compileFile)){include_once($compileFile);$content = ob_get_clean();file_put_contents($cacheFile,$content);}include_once($cacheFile);}else{include_once($compileFile);}}
}

smarty编译,缓存原理相关推荐

  1. smarty模板引擎原理解析

    //php 控制器文件 <?php //引入模板引擎文件 include("20130304.php"); $smarty = new TinySmarty(); $qq_n ...

  2. mybaits延迟加载原理_Nginx缓存原理及机制

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 上篇文章介绍了Nginx一个较为重要的知识点:Nginx实现接口限流.本篇文章将介绍Nginx另一个重要知识点 ...

  3. Mybatis执行流程、缓存原理以及相关面试题

    一.Mybatis执行流程 具体分析Mybatis是如何操作数据库的! . 1.定义我们的核心配置文件的路径,这个路径是从target/classes下开始找的! String config = &q ...

  4. php smarty关闭缓存,php+Smarty的缓存操作

    一.使用缓存 要开启smarty的缓存,只需将caching设为true,并指定cache_dir即可. 使用cache_lefetime指定缓存生存时间,单位为秒 要对相同页面生成多个不同的缓存,在 ...

  5. Hibernate缓存原理与策略 Hibernate缓存原理:

    Hibernate缓存原理: 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等 ...

  6. RecycleView 缓存原理解析

    前言 下面让我们剖析一下RecycleView 缓存原理. RecycleView 缓存类型 缓存容器 需要创建布局 需要重新绑定 存入时机 取出时机 mAttachedScrap 否 否 Recyc ...

  7. 版本更新带来的缓存问题_浏览器缓存原理总结

    作者: Poetry 来源:http://blog.poetries.top/2019/01/02/browser-cache/ 一.浏览器缓存基本认识 分为强缓存和协商缓存 1.浏览器在加载资源时, ...

  8. MyBatis 源码分析 - 缓存原理

    1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请求,减轻数据库压力.作为一个重要的组件,MyBatis 自然 ...

  9. 操作系统:基于页面置换算法的缓存原理详解(下)

    概述: 在上一篇<操作系统:基于页面置换算法的缓存原理详解(上)>中,我们主要阐述了FIFO.LRU和Clock页面置换算法.接着上一篇说到的,本文也有三个核心算法要讲解.分别是LFU(L ...

  10. 里面怎么缓存图片_浏览器缓存原理总结

    一.浏览器缓存基本认识 分为强缓存和协商缓存 1.浏览器在加载资源时,先根据这个资源的一些http header判断它是否命中强缓存,强缓存如果命中,浏览器直接从自己的缓存中读取资源,不会发请求到服务 ...

最新文章

  1. 由谈退格键的实现来学习字符编码
  2. 循环训练_力量循环训练
  3. python做小程序-抖音最火的整蛊表白小程序如何做出来的?教你用python做出
  4. 零元学Expression Blend 4 - Chapter 1 缘起
  5. ElasticSearch ---- 查询
  6. 测试是个艺术活儿:测试需求分工原则
  7. 十天学会php chm,【div+css】十天学会div+css---第一天_html/css_WEB-ITnose
  8. php 百度地图 云存储,jspopular3.0 | 百度地图API SDK
  9. 浅谈电动自行车智能充电管理系统的设计及应用
  10. 小学知识三角函数和差化积
  11. mmsegmentation 训练自制数据集
  12. 1. 微信公众号申请
  13. JavaSE、JavaEE、JavaME三者之间的关系与区别
  14. 解决sourcetree特别卡的问题
  15. 07-07-Exchange Server 2019-配置-脱机地址簿
  16. 华为交换机审计配置_上网行为管理审计之交换机端口镜像配置(华为)
  17. OFDM完整仿真过程及解释(MATLAB)
  18. 如何检索论文时让两个词在一块而不是分开?
  19. Mac搭建轻量级BI工具Superset(一)
  20. zzulioj新生周赛(6) 2733 问题K : 键盘霸主hrs

热门文章

  1. C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面...
  2. SourceTree 实现 git flow 流程
  3. 2016年CIO要掌握五大新思维
  4. OpenGL的几何变换[转]
  5. UrlRewriter配置IIS支持伪静态
  6. VB6 GDI+ 入门教程[7] Graphics 其他内容
  7. DataGrid固定列宽
  8. ffmpeg将h264和aac合成ts,内存输入输出
  9. 把块存放在页高速缓存中
  10. 多源最短路(Floyd算法)