做的网站虽然是小网站,但也要有一颗优化的心,因为有新闻资讯模块,所以想做一下静态化页面
1、页面静态化思路:
1.初始化:当用户打开新闻资讯模块时,将获取的每个新闻添加缓存
2.判断:判断是否有该新闻的缓存。
3.显示:如果有缓存,直接使用该缓存新闻内容,如果没有,数据库查询显示对应新闻内容
这是未使用缓存时的页面加载速度
看右下角打开时间为0.043816s
2、代码实例
① 首先配置Cache缓存
我使用的是默认的文件缓存,主要是指定下缓存文件目录
// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------
return [
// 默认缓存驱动
'default' => env('cache.driver', 'file'),
// 缓存连接方式配置
'stores' => [
'file' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => '../runtime/file/',
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
// 缓存标签前缀
'tag_prefix' => 'tag:',
// 序列化机制 例如 ['serialize', 'unserialize']
'serialize' => [],
],
// 更多的缓存连接
],
];
原文
②初始化需要缓存的内容
/**
* 新闻列表
*/
public function index()
{
$data = WorkNews::getNewsList(5,1);//获取前5条新闻信息
foreach ($data as $val){
Cache::set("news_".$val->id,view("news/newsDetail",["data"=>$val])->getContent(),3600*24);//加入缓存,缓存过期时间24小时
}
return view("news/news",["data"=>$data]);
}
/**
* 分页ajax数据
* @param Request $request
* @return \think\response\Json
*/
public function getNewsList(Request $request){
if ($request->isAjax()){
$limit = $request->param('limit');//获取每页显示数量
$page = $request->param('page');//获取页数
$data = WorkNews::getNewsList($limit,$page);//获取页数的对应数据
foreach ($data as $val){
Cache::set("news_".$val->id,view("news/newsDetail",["data"=>$val])->getContent(),3600*24);//加入缓存
}
return json($data);
}
}
/**
* 新闻详情
*/
public function newsDetail($id){
if (Cache::get('news_'.$id)){//判断是否有该新闻的缓存,如果有直接返回,如果没有查询数据库返回
return Cache::get('news_'.$id);
}else{
$data = WorkNews::getNews($id);
return view("news/newsDetail",["data"=>$data]);
}
}
view()助手函数应该都知道吧,这里主要说一下getContent()方法,该方法可以将生成的网页内容文本化,就是生成一串html字符串,对象不能直接存到缓存中,转化成字符串就可以了。
使用缓存后的网页打开时间,打开速度快了一倍
蚊子再小也是肉