之前在看到可以关闭compile_check来减少模板编译文件的判断,这几天看了下 郭欣
的《构建高性能Web站点》,再次学到好东西。就是放弃smarty自带的缓存文件的判断,直接生成html文件,然后用stat来检查html文件的时间,用来判断是否缓存是否过期。代码类似:
$cache_filename =
'cache/enjoy_'.$par.'.htm';
$stat_info =
@stat($cache_filename);
if($stat_info && $stat_info[9] >
time()-10800){
echo
file_get_contents($cache_filename);
exit();
}
......
$html
=
$smarty->fetch($template_name,$par);
file_put_contents($cache_filename,$html);
echo
$html;
用本机的程序测试了下,本机因为是测试环境,没有装apc。
ab.exe -n 100 -c 10
http://www.itokit.com/
没用使用smarty缓存,就1句速度很快的SQL查询语句
Document
Path: /
Document Length: 16787 bytes
Time taken for
tests: 1.984 seconds
Total transferred: 1697100 bytes
HTML
transferred: 1678700 bytes
Requests per second: 50.39 [#/sec]
(mean)
Time per request: 198.438 [ms] (mean)
Time per request:
19.844 [ms] (mean, across all concurrent requests)
Transfer
rate: 835.19 [Kbytes/sec] received
使用smarty缓存后:
Time taken
for tests: 1.891 seconds
Total transferred: 1697100 bytes
HTML
transferred: 1678700 bytes
Requests per second: 52.89 [#/sec]
(mean)
Time per request: 189.063 [ms] (mean)
Time per request:
18.906 [ms] (mean, across all
Transfer rate: 876.60 [Kbytes/sec]
received
没多大提高。
改造之后,但仍然先构造了smarty对象
Time taken for tests: 0.688
seconds
Total transferred: 1697100 bytes
HTML transferred:
1678700 bytes
Requests per second: 145.45 [#/sec] (mean)
Time per
request: 68.750 [ms] (mean)
Time per request: 6.875 [ms] (mean,
across all concurrent requests)
Transfer rate: 2410.65 [Kbytes/sec]
received
显著提高啊!
把加载smarty的语句放在判断后:
Time taken for tests:
0.391 seconds
Total transferred: 1697100 bytes
HTML
transferred: 1678700 bytes
Requests per second: 256.00 [#/sec]
(mean)
Time per request: 39.063 [ms] (mean)
Time per request:
3.906 [ms] (mean, across all concurrent requests)
Transfer
rate: 4242.75 [Kbytes/sec]
received
再次大幅提高!
如果自定义了缓存文件名称,那么删除缓存文件就得另外写一个,不能使用smarty自带的。如果要使用smarty自带的删除功能,那么缓存文件就要使用smarty的方式来命名。如模板文件为index.html,那么生成的缓存文件为:%%77^774^774BE9C9%%index.html,如果加了hx这个$cache_id,那么缓存文件为:hx^%%77^774^774BE9C9%%index.html。这是怎么生成的呢?我根据smarty核心程序中的_get_auto_id和_get_auto_filename函数写了一个生成缓存文件名的一个函数。
function
get_smarty_cachefile($cache_dir,$template_name,$cache_id=null){
$_compile_dir_sep
= '^';
$_return =
$cache_dir.DIRECTORY_SEPARATOR;
if(isset($cache_id))
{
$auto_id =
str_replace('%7C',$_compile_dir_sep,(urlencode($cache_id)));
$_return
.= $auto_id . $_compile_dir_sep;
}
$_filename =
urlencode(basename($template_name));
$_crc32 = sprintf('%08X',
crc32($template_name));
$_crc32 = substr($_crc32, 0, 2) .
$_compile_dir_sep .
substr($_crc32, 0, 3) . $_compile_dir_sep .
$_crc32;
$_return .= '%%' . $_crc32 . '%%' . $_filename;
return
$_return;
}
这个函数,未考虑缓存目录分级,如果有使用缓存目录分级$smarty->use_sub_dirs=true,那么只需要把$_compile_dir_sep
= '^';改为$_compile_dir_sep
=DIRECTORY_SEPARATOR即可。
如上例:
$cache_filename =
get_smarty_cachefile('cache',$template_name,'hx');
这样就可以使用$smarty->clear_cache($template_name,
'hx')来删除这个缓存文件。
这样,只需要更改判断是否有缓存的代码,尽量把加载smarty的代码和初始化smarty放到判断之后,其他的不用考虑,就可以享受smarty性能的提升了。
分享到:
相关推荐
本讲主要介绍了Smarty在缓存应用方面的知识,包括配置、使用、清除以及与MySQL的结合。 1. Smarty缓存的配置: 在使用Smarty进行缓存时,首先需要在配置文件(通常为`config.php`)中启用缓存功能。这可以通过设置...
1、Smarty缓存的配置 $smarty->cache_dir = "/caches/"; //缓存目录 $smarty->caching = true; //开启缓存,为flase的时侯缓存无效 $smarty->cache_lifetime = 60; //缓存时间2、Smarty缓存的使用和清除 $...
综上所述,Smarty提供的缓存管理、自定义缓存处理以及局部关闭缓存等功能,为开发者提供了强大的工具来优化Web应用的性能。同时,通过`{insert}`标签和注册插件块,还可以灵活地在模板中插入动态内容和复用代码片段...
软件介绍 1、Smarty缓存的配置 $smarty->cache_dir = "/caches/"; //缓存目录 $smarty->caching = true; //开启缓存,为flase的时侯缓存无效 $smarty->cache_lifetime = 60; //缓存时间 2、Smarty缓存的...
在Smarty 2.6.26版本中,局部缓存功能是提高网站性能的重要手段,尤其对于频繁变动的数据部分。本文将详细介绍两种局部缓存方法以及如何自定义生成静态文件。 ### 一、Smarty的局部缓存 #### 1. `{cached}` 指令 ...
在Smarty众多功能中,模板缓存是一个非常重要的性能优化手段。它通过存储模板的输出结果,来减少对数据库的重复查询和页面生成的时间,从而提高网站的响应速度和减少服务器负载。 首先,要使用Smarty的缓存功能,...
学习这个教程,你将了解如何利用Smarty优化PHP应用程序的性能,理解模板引擎的工作原理,并掌握如何在项目中有效地使用缓存。这将有助于你成为一个更专业的PHP开发者,能够构建出高效、易于维护的Web应用程序。
Smarty是一款广泛使用的...正确使用缓存策略,结合全局和局部缓存,以及自定义缓存处理,能够为网站带来更好的性能优化。在实际应用中,还需要注意缓存更新策略和缓存失效时间的设定,以确保用户体验和数据的实时性。
10. **使用技巧和经验**:在实践中,了解如何优化模板性能、如何安全地处理用户输入、何时使用缓存以及如何组织模板结构等都是很重要的技巧。此外,理解和运用Smarty的模板继承和布局概念,可以提高代码的复用性。 ...
总之,SMARTY的缓存机制通过以上提到的三种方式,以及清除缓存的方法,有效地帮助开发者优化应用性能。合理的使用SMARTY缓存可以大大减少服务器资源的消耗,提高页面响应速度,尤其是对于那些数据变化不频繁但访问量...
Smarty的配置允许开发者自定义模板目录、编译目录、缓存策略等。例如,`$smarty->setTemplateDir('templates')`设置模板目录,`$smarty->setCompileDir('templates_c')`设置编译目录。 四、Smarty缓存 Smarty有内置...
- **缓存管理**:理解Smarty的缓存机制,包括何时启用缓存,如何清除缓存,以及自定义缓存策略。 - **实际项目应用**:通过实践项目,将学到的理论知识应用于实际开发,提高解决问题的能力。 "Smarty0.1"这个文件...
1. **速度优化**:相比于其他模板引擎,Smarty能提供更快的执行速度。它通过编译模板为纯PHP代码,使得在后续请求中可以直接执行已编译好的文件,避免了重复解析模板的开销。 2. **编译型模板**:Smarty在运行时会...
文件缓存是Smarty性能优化的关键。Smarty提供了两种类型的缓存:编译缓存和显示缓存。 - **编译缓存**:如上所述,模板会被编译成PHP代码并存储,下次请求时直接执行。这个过程大大减少了解析模板的时间。 - **显示...
Smarty3.1版本是该引擎的一个稳定分支,提供了许多增强的功能和优化。 一、Smarty核心概念 1. 模板(Template):模板文件通常由HTML、CSS和JavaScript组成,但其中可以包含Smarty语法,如变量、控制结构等,这些...
通过合理设置缓存策略、优化模板代码、减少不必要的函数调用等方法,可以提升Smarty的运行效率。此外,Smarty还支持编译缓存,将模板编译为PHP代码存储,下次使用时直接执行,提高模板解析速度。 8. **Smarty的...
在Smarty中,页面缓存是一种重要的性能优化手段,它能减少对服务器资源的消耗以及提高页面加载速度。在配置文件中设置缓存目录后,通常情况下整个模板页面只有一个缓存文件。但是,有时候我们需要针对不同的请求生成...
在Smarty-3.1.29这个版本中,可能包含了一些bug修复、性能优化和新功能的添加,但具体更新内容需要查看该版本的官方发布说明。使用这个版本,开发者可以获得更稳定、更高效的模板处理体验。为了确保最佳性能和兼容性...
2. **缓存机制**: Smarty支持缓存功能,可以将处理过的模板结果保存起来,对于不经常变动的内容,可以显著提高页面加载速度。 3. **安全性**: Smarty通过预定义的安全策略和过滤器,确保模板中的数据在输出时不会...
3. **缓存机制**:Smarty支持缓存功能,可以提高网页的加载速度。当模板数据不常变化时,可以将其缓存起来,避免每次都重新生成HTML。 4. **预编译和编译优化**:Smarty会先将模板文件预编译成PHP代码,然后在运行...