- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章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个方法: 1、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:<?php echo insert_get_current_time(array ( ),$_smarty_tpl);?> cache: 2012-06-04 15:46:52 。
复制代码代码如下
这种方法简单,但是如果要显示的内容是一大块的,就不宜使用了。 2、动态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] <?php echo $_smarty_tpl->tpl_vars['date']->value;?> 。
复制代码代码如下
3、插件block 法 这个方法和第2个差不多,只是把php中的自定义块,放到smarty目录中的plugins文件夹中。 在Smarty/plugins目录下建一个文件 block.nocache.php 内容如下: 。
<?php function smarty_block_nocache($param, $content, $smarty) { return $content; } ?> [code] tpl模板中的使用和第二个方法一样 总结 可以总结出Smarty缓存技术,能大大的提高网站的速度和质量,用法也比较简单。 最后提醒一下的就是, Smarty生成的缓存文件的扩展名虽然是php,但并不会被当作php代码来解析. 作者:那瞬间 。
最后此篇关于Smarty的配置与高级缓存技术分享的文章就讲到这里了,如果你想了解更多关于Smarty的配置与高级缓存技术分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我阅读了有关 JSR 107 缓存 (JCache) 的内容。 我很困惑:据我所知,每个 CPU 都管理其缓存内存(无需操作系统的任何帮助)。 那么,为什么我们需要 Java 缓存处理程序? (如果C
好吧,我是 jQuery 的新手。我一直在这里和那里搞乱一点点并习惯它。我终于明白了(它并不像某些人想象的那么难)。因此,鉴于此链接:http://jqueryui.com/sortable/#dis
我正在使用 Struts 2 和 Hibernate。我有一个简单的表,其中包含一个日期字段,用于存储有关何时发生特定操作的信息。这个日期值显示在我的 jsp 中。 我遇到的问题是hibernate更
我有点不确定这里发生了什么,但是我试图解释正在发生的事情,也许一旦我弄清楚我到底在问什么,就可能写一个更好的问题。 我刚刚安装了Varnish,对于我的请求时间来说似乎很棒。这是一个Magneto 2
解决 Project Euler 的问题后,我在论坛中发现了以下 Haskell 代码: fillRow115 minLength = cache where cache = ((map fill
我正试图找到一种方法来为我网络上的每台计算机缓存或存储某些 python 包。我看过以下解决方案: pypicache但它不再被积极开发,作者推荐 devpi,请参见此处:https://bitbuc
我想到的一个问题是可以从一开始就缓存网络套接字吗?在我的拓扑中,我在通过双 ISP 连接连接到互联网的 HAProxy 服务器后面有 2 个 Apache 服务器(带有 Google PageSpee
我很难说出不同缓存区域 (OS) 之间的区别。我想简要解释一下磁盘\缓冲区\交换\页面缓存。他们住在哪里?它们之间的主要区别是什么? 据我了解,页面缓存是主内存的一部分,用于存储从 I/O 设备获取的
1.题目 请你为最不经常使用(LFU)缓存算法设计并实现数据结构。 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象 in
1.题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: ① LRUCache(int capacity) 以正整数作为容量 capacity
我想在访问该 View 时关闭某些页面的缓存。它适用于简单查询模型对象的页面。 好像什么时候 'django.middleware.cache.FetchFromCacheMiddleware', 启
documents为 ExePackage element state Cache属性的目的是 Whether to cache the package. The default is "yes".
我知道 docker 用图层存储每个图像。如果我在一台开发服务器上有多个用户,并且每个人都在运行相同的 Dockerfile,但将镜像存储为 user1_myapp . user2 将其存储为 use
在 Codeigniter 中没有出现缓存问题几年后,我发现了一个问题。我在其他地方看到过该问题,但没有适合我的解决方案。 例如,如果我在 View 中更改一些纯 html 文本并上传新文件并按 F5
我在 Janusgraph 文档中阅读了有关 Janusgraph Cache 的内容。关于事务缓存,我几乎没有怀疑。我在我的应用程序中使用嵌入式 janusgrah 服务器。 如果我只对例如进行读取
我想知道是否有来自终端的任何命令可以用来匹配 Android Studio 中执行文件>使缓存无效/重新启动的使用。 谢谢! 最佳答案 According to a JetBrains employe
我想制作一个 python 装饰器来内存函数。例如,如果 @memoization_decorator def add(a, b, negative=False): print "Com
我经常在 jQuery 事件处理程序中使用 $(this) 并且从不缓存它。如果我愿意的话 var $this = $(this); 并且将使用变量而不是构造函数,我的代码会获得任何显着的额外性能吗?
是的,我要说实话,我不知道varnish vcl,我可以解决一些基本问题,但是我不太清楚,这就是为什么我遇到问题了。 我正在尝试通过http请求设置缓存禁止,但是该请求不能通过DNS而是通过 Varn
在 WP 站点上加载约 4000 个并发用户时遇到此问题。 这是我的配置: F5 负载均衡器 ---> Varnish 4,8 核,32 Gb RAM ---> 9 个后端,4 个核,每个 16 RA
我是一名优秀的程序员,十分优秀!