本文分享使用thinkphp框架自带的静态缓存实现文件静态化。
欢迎讨论和吐槽。
目的
- 使用的场景是访问活动页面的时候希望进行静态化处理,提升请求效率;
页面静态化有多种解决方案,如使用yac保存在内存中,本文分享的是使用tp自带的缓存功能生成静态化的html文件(可以是其他文件)。
操作
使用此功能是比较简单,步骤如下(基于tp3.2):
conf中配置开启静态缓存
'HTML_CACHE_ON'=>true,//静态化相关 'HTML_CACHE_TIME' => 60, // 全局静态缓存有效期(秒) 'HTML_FILE_SUFFIX' => '.html', // 设置静态缓存文件后缀 'HTML_CACHE_RULES'=> array( 'index:commonindex' => array('{act}', '60'), //缓存规则 ),
缓存规则有多种配置方式,可参考文档。
确认HTML_PATH的路径配置,确认此路径文件夹存在:
defined('HTML_PATH') or define('HTML_PATH', APP_PATH.'Html/'); // 应用静态目录
问题
这里阐述下分享过程中遇到的问题:
- 确保HTML_PATH指定的文件夹存在
- 配置的规则方法要用小写,如commonindex(未测试commonIndex是否可以);
- tp的缓存需要基于display加载的view文件,没有加载view文件直接输入内容无法生成缓存。
思考和总结
- 使用tp自带的缓存功能实现文件静态化比较简单的;
- 但是其中也有些限制,在问题模块大致阐述,还可以用以下方案替代:
- 将html内容存在内存(如使用yac,redis),请求的时候先拿缓存直接输出;
- 访问到页面后生成html文件放在服务器某目录,下一次访问在进入项目之前判断存在此文件则直接走缓存文件;
- 页面静态化的时候,如果页面有内容是需要动态加载的,对于数据少的可以加载页面完了用ajax请求去更新,更好的方法是
在服务器端取出静态文件的时候就去更新拼接态内容,这样前端看不到一个刷的过程。