`
butter
  • 浏览: 125905 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

smarty缓存终极优化测试

阅读更多

之前在看到可以关闭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性能的提升了。
分享到:
评论

相关推荐

    (第30讲) PHP模板引擎Smarty缓存应用

    本讲主要介绍了Smarty在缓存应用方面的知识,包括配置、使用、清除以及与MySQL的结合。 1. Smarty缓存的配置: 在使用Smarty进行缓存时,首先需要在配置文件(通常为`config.php`)中启用缓存功能。这可以通过设置...

    PHP100视频教程 30:PHP模板引擎Smarty缓存应用

    1、Smarty缓存的配置 $smarty->cache_dir = "/caches/"; //缓存目录 $smarty->caching = true; //开启缓存,为flase的时侯缓存无效 $smarty->cache_lifetime = 60; //缓存时间2、Smarty缓存的使用和清除 $...

    smarty缓存部分参考

    综上所述,Smarty提供的缓存管理、自定义缓存处理以及局部关闭缓存等功能,为开发者提供了强大的工具来优化Web应用的性能。同时,通过`{insert}`标签和注册插件块,还可以灵活地在模板中插入动态内容和复用代码片段...

    PHP100视频教程 30:PHP模板引擎Smarty缓存应用.rar

    软件介绍 1、Smarty缓存的配置  $smarty->cache_dir = "/caches/"; //缓存目录  $smarty->caching = true; //开启缓存,为flase的时侯缓存无效  $smarty->cache_lifetime = 60; //缓存时间 2、Smarty缓存的...

    smarty两种局部缓存方法和自定义生成静态文件的例子

    在Smarty 2.6.26版本中,局部缓存功能是提高网站性能的重要手段,尤其对于频繁变动的数据部分。本文将详细介绍两种局部缓存方法以及如何自定义生成静态文件。 ### 一、Smarty的局部缓存 #### 1. `{cached}` 指令 ...

    smarty缓存用法分析

    在Smarty众多功能中,模板缓存是一个非常重要的性能优化手段。它通过存储模板的输出结果,来减少对数据库的重复查询和页面生成的时间,从而提高网站的响应速度和减少服务器负载。 首先,要使用Smarty的缓存功能,...

    PHP100视频教程30:PHP模板引擎Smarty缓存应用.rar

    学习这个教程,你将了解如何利用Smarty优化PHP应用程序的性能,理解模板引擎的工作原理,并掌握如何在项目中有效地使用缓存。这将有助于你成为一个更专业的PHP开发者,能够构建出高效、易于维护的Web应用程序。

    PHP模板引擎Smarty的缓存用法_.docx

    Smarty是一款广泛使用的...正确使用缓存策略,结合全局和局部缓存,以及自定义缓存处理,能够为网站带来更好的性能优化。在实际应用中,还需要注意缓存更新策略和缓存失效时间的设定,以确保用户体验和数据的实时性。

    Smarty_smarty_

    10. **使用技巧和经验**:在实践中,了解如何优化模板性能、如何安全地处理用户输入、何时使用缓存以及如何组织模板结构等都是很重要的技巧。此外,理解和运用Smarty的模板继承和布局概念,可以提高代码的复用性。 ...

    Smarty缓存机制实例详解【三种缓存方式】

    总之,SMARTY的缓存机制通过以上提到的三种方式,以及清除缓存的方法,有效地帮助开发者优化应用性能。合理的使用SMARTY缓存可以大大减少服务器资源的消耗,提高页面响应速度,尤其是对于那些数据变化不频繁但访问量...

    smarty最新手册 smarty中英文结合版

    Smarty的配置允许开发者自定义模板目录、编译目录、缓存策略等。例如,`$smarty->setTemplateDir('templates')`设置模板目录,`$smarty->setCompileDir('templates_c')`设置编译目录。 四、Smarty缓存 Smarty有内置...

    李炎恢Smarty专题精讲视频课程源码

    - **缓存管理**:理解Smarty的缓存机制,包括何时启用缓存,如何清除缓存,以及自定义缓存策略。 - **实际项目应用**:通过实践项目,将学到的理论知识应用于实际开发,提高解决问题的能力。 "Smarty0.1"这个文件...

    smarty

    1. **速度优化**:相比于其他模板引擎,Smarty能提供更快的执行速度。它通过编译模板为纯PHP代码,使得在后续请求中可以直接执行已编译好的文件,避免了重复解析模板的开销。 2. **编译型模板**:Smarty在运行时会...

    php模板解析类文件缓存

    文件缓存是Smarty性能优化的关键。Smarty提供了两种类型的缓存:编译缓存和显示缓存。 - **编译缓存**:如上所述,模板会被编译成PHP代码并存储,下次请求时直接执行。这个过程大大减少了解析模板的时间。 - **显示...

    smarty模板引擎3.1

    Smarty3.1版本是该引擎的一个稳定分支,提供了许多增强的功能和优化。 一、Smarty核心概念 1. 模板(Template):模板文件通常由HTML、CSS和JavaScript组成,但其中可以包含Smarty语法,如变量、控制结构等,这些...

    smarty模板引擎教程

    通过合理设置缓存策略、优化模板代码、减少不必要的函数调用等方法,可以提升Smarty的运行效率。此外,Smarty还支持编译缓存,将模板编译为PHP代码存储,下次使用时直接执行,提高模板解析速度。 8. **Smarty的...

    smarty 缓存控制前的页面静态化原理

    在Smarty中,页面缓存是一种重要的性能优化手段,它能减少对服务器资源的消耗以及提高页面加载速度。在配置文件中设置缓存目录后,通常情况下整个模板页面只有一个缓存文件。但是,有时候我们需要针对不同的请求生成...

    smarty-3.1.29

    在Smarty-3.1.29这个版本中,可能包含了一些bug修复、性能优化和新功能的添加,但具体更新内容需要查看该版本的官方发布说明。使用这个版本,开发者可以获得更稳定、更高效的模板处理体验。为了确保最佳性能和兼容性...

    Smarty+smarty中文手册

    2. **缓存机制**: Smarty支持缓存功能,可以将处理过的模板结果保存起来,对于不经常变动的内容,可以显著提高页面加载速度。 3. **安全性**: Smarty通过预定义的安全策略和过滤器,确保模板中的数据在输出时不会...

    Smarty最新版下载自Smarty官网

    3. **缓存机制**:Smarty支持缓存功能,可以提高网页的加载速度。当模板数据不常变化时,可以将其缓存起来,避免每次都重新生成HTML。 4. **预编译和编译优化**:Smarty会先将模板文件预编译成PHP代码,然后在运行...

Global site tag (gtag.js) - Google Analytics