wecenter半伪静态思路

三叔
三叔 http://www.sanshu.cn

2 人点赞了该文章 · 1509 浏览

    最近针对wecenter的攻击越来越多了。这是个好事,这说明我们坚守的wecenter越来越出名了。

    那作为wecenter的死忠+野生技术宅。我希望如下思路能给各位大佬带来一些灵感。 更希望有大佬能把这个思路做成插件(我不太擅长做插件)。

    攻击网站。出了DDOS攻击之外。最多的就是CC攻击了。

    CC攻击主要的手段就是消耗数据库链接。 比如并发大让数据库CPU暴增。 或者恶意使用搜索功能这类容易造成慢SQL(执行返回结果慢)来消耗数据库可用链接数。

    所以我们需要改善SQL性能损耗。

    改善性能损耗一般来说就是利用内存缓存,或者文件静态化。

    内存缓存一般对服务器内存比较高,这个我们这篇不讲。

    我们讲文件静态化。

    文件静态化,顾名思义就是将用户访问时的渲染好的页面保存成一个静态的文件。

    比如用户访问 http://www.sanshu.cn/a/72189.html 时 程序在article/main.php的文章渲染时,将渲染好的内容保存到 网站目录的 a目录下的72189.html里。

      反正用户访问这篇文章的时候,重点关注的内容每次打开都一样。最多就是访问数会不一样(这并不是重点)。

    纯静态化的方法 我之前有写过文章:

    https://wenda.wecenter.com/article/1707

    这种方法能极大的缓解数据库的压力,提升网页打开速度。但是带来的就是网站访问数量不更新。所以纵使三叔的博客访问量日益上涨,但是首页显示文章数还是寥寥无几,不过三叔也不在乎这些啦。

    4cd8e7d7ede49483ec52f062e3477db3.jpg

    所以,在后来的代码里(没在三叔博客上使用)我换了代码。

    文章页 也就是 /app/article/main.php里追加了一个代码:

private function get_temp_path($id){
$filepath = '/articletemp/'.id.'.htm';
return $filepath;
}

function use_cache(){
return 'Y';
}


    然后在index_action方法的开始位置加入:

$this->model('article')->update_views($article_info['id']);
if($this->use_cache()==='Y'){
$tmp_path = $this->get_temp_path($id);
if(file_exists($tmp_path)){
die(file_get_contents($tmp_path));
}
}


找到这个方法里原来的 

$this->model('article')->update_views($article_info['id']);

然后删掉。因为前面有过了。


然后在访问的最后找到

TPL::output('article/index');

改成

$content = TPL::output('article/index',false);
if($this->use_cache()==='Y'){
createHtmlFile($this->get_temp_path($article_info['id']),$content);
}


createHtmlFile 的方法 见 静态化文章里。

这样就可以做到每次访问文章的时候会更新文章访问数量。这样首页展示的时候,文章访问量会变。

如果文章有什么不足之处,希望大佬给出建议。多谢。

发布于 2021-03-29 11:25

免责声明:

本文由 三叔 原创发布于 WeCenter ,著作权归作者所有。

登录一下,更多精彩内容等你发现,贡献精彩回答,参与评论互动

登录! 还没有账号?去注册

暂无评论