1, 在开发项目时, 有时会遇到一些页面数据量特别大, 但是又不经常改变的情况, 如商城首页等, 这时候就需要进行页面静态化, 减轻服务器和数据库的压力.
这里我们先用原生的 PHP 写一个简单的 demo, 用来理解页面静态化的原理, 然后再尝试用框架说明一下 (ThinkPHP).
主要会使用到 PHP 的 ob 相关函数和文件操作函数 file_put_contents.
这里在项目中新建了两个文件, test.PHP(控制器),muban.PHP(模板)
test.PHP
- if(file_exists("match.html") && (time()-filemtime("match.html"))<300)
- {
- // 如果存在对应的静态文件, 则直接访问
- require_once("match.html");
- }else{
- // 这里用数组来仿真数据库操作, 现实一般都是操作数据库得到对应数据
- $student = array("huangxing","chenyuwei",'xufei','zhangjingwen','xuepei');
- ob_start();
- // 载入模板
- require_once("muban.php");
- file_put_contents("match.html",ob_get_clean());
- require_once('match.html');
- }
muban.PHP
- "en">
- "UTF-8">
- foreach ($student as $key => $value) {?>
- echo $value;?>
然后在浏览器执行 test.PHP, 就可以看到项目中生成了 match.HTML 静态文件.
以上是一个全静态化的 demo, 现实项目中可能会遇到局部动态化的情况. 如商城首页, 大部分是不需要修改的, 但是可能有一个实时的活动需要在首页展示, 这是可以使用 Ajax 异步加载技术.
一般的框架中都自定义好了页面静态化函数, 或者相关配置, 以 thinkphp3.2 为例, 只需要在配置文件做相关配置就可以, 具体可以参考 ThinkPHP 手册 缓存 => 静态缓存
- return array(
- 'HTML_CACHE_ON' => true, // 开启静态缓存
- 'HTML_CACHE_TIME' => 3600, // 全局静态缓存有效期 (秒)
- 'HTML_FILE_SUFFIX' => '.shtml', // 设置静态缓存文件后缀
- 'HTML_CACHE_RULES'=> array(// 定义静态缓存规则
- 'Index:index' =>array('{:controller}_{:action}'),
- ),
- 'HTML_PATH'=>'./HTML/',
- );
这里需要注意的就是 HTML_CACHE_RULES
来源: http://www.bubuko.com/infodetail-2854267.html