对内容不经常变化的面向用户的页面进行静态化处理可以显著提升页面的响应速度,同时还可以减少对服务器系统资源的占用并降低数据库服务器的压力。在php
项目中如何实现页面静态化呢?
实现原理
通过对页面内容的缓存来取代数据库查询和数据处理。
实现步骤
- 请求页面时判断页面缓存是否存在,如果存在是否过期。
- 如果页面缓存存在并且没有过期则直接将缓存内容返回给浏览器。
- 如果页面缓存不存在或者已经过期,则进行正常的数据库查询及页面渲染,同时将页面缓存起来。
示例代码
/**
* 以下代码放置于脚本逻辑开始之前。
* 这段代码包含的配置信息如$page_static_config可能是从配置文件中读取的。
* 代码中的$url_info数组元素的具体值可能是通过程序去获取的而不是写死,以此可以提高代码的可移植性和复用度。
*/
$page_static_config = [ // 页面静态化配置
'cache_ext' => '.html', // 缓存文件后缀
'cache_time' => 21600, // 缓存保留时间
'cache_folder' => '../tmp/cache/static/' // 静态文件放置的文件夹
];
$url_info = [ // 页面地址参数
'host' => $_SERVER['HTTP_HOST'],
'constroller' => 'index',
'action' => 'index',
'param' => '/12/34'
];
$this_url = 'http://'.$url_info['host'].'/'.$url_info['controller'].'/'.$url_info['action'].$url_info['param']; // 唯一标识当前访问的地址
$cache_file = $page_static_config['cache_folder'].md5($this_url).$page_static_config['cache_ext']; // 缓存文件名
if (file_exists($cache_file) && time() - $page_static_config['cache_time'] < filemtime($cache_file)) { // 缓存文件存在并且没有过期
ob_start('ob_gzhandler'); // 打开输出控制缓冲,参数`ob_gzhandler`是一个回调函数,用来压缩输出缓冲区中的内容。
readfile($cache_file); // 读取缓存的静态文件内容并写入输出缓冲。
ob_end_flush(); // 送出输出缓冲区内容并关闭缓冲。
exit;
}
// 当缓存静态文件不存在时需要进行正常的数据查询和整理并渲染页面,同时将页面内容保存为缓存文件以实现页面静态化。
ob_start('ob_gzhandler');
$this->set('page_static_config', $page_static_config);
$this->set('cache_file', $cache_file);
/**
* 以下代码放置于所有代码之后,可以简单理解为放在