问题描述
本文仅适用于emlog5.3.1
使用emlog搭建的博客如果注册用户过多,会导致站点统计缓存的时候运行时间过长,具体表现为发布文章,更新数据,评论之类的写操作时很慢,甚至造成运行超时错误。
原因
原因是缓存站点统计的函数是通过循环遍历用户来分别统计相关数据,每次统计都会进行数据库的连接、查询。当注册用户特别多的时候,就会进行大量的mysql连接查询,就算每次查询需要1ms, 运行过万次,也必然导致程序运行时间过长。
解决方法
如果用户量不是特别大(1000以下)则不建议修改程序内核,如有需要可通过修改 include/lib/cache.php
文件中的 mc_sta
函数修复:
/**
* 站点统计缓存
*/
private function mc_sta() {
$sta_cache = array();
$data = $this->db->once_fetch_array("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "blog WHERE type='blog' AND hide='n' AND checked='y' ");
$lognum = $data['total'];
$data = $this->db->once_fetch_array("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "blog WHERE type='blog' AND hide='y'");
$draftnum = $data['total'];
$data = $this->db->once_fetch_array("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "blog WHERE type='blog' AND hide='n' AND checked='n' ");
$checknum = $data['total'];
$data = $this->db->once_fetch_array("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "comment WHERE hide='n' ");
$comnum = $data['total'];
$data = $this->db->once_fetch_array("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "comment WHERE hide='y' ");
$hidecom = $data['total'];
$data = $this->db->once_fetch_array("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "twitter ");
$twnum = $data['total'];
$sta_cache = array(
'lognum' => $lognum,
'draftnum' => $draftnum,
'comnum' => $comnum,
'comnum_all' => $comnum + $hidecom,
'twnum' => $twnum,
'hidecomnum' => $hidecom,
'checknum' => $checknum,
);
$logNumQuery = $this->db->query("SELECT author,COUNT(*) AS total FROM " . DB_PREFIX . "blog WHERE hide='n' and type='blog' group by author");
$draftNumQuery = $this->db->query("SELECT author,COUNT(*) AS total FROM " . DB_PREFIX . "blog WHERE hide='y' and type='blog' group by author");
$commentNumQuery = $this->db->query("SELECT author,COUNT(*) AS total FROM " . DB_PREFIX . "comment AS a, " . DB_PREFIX . "blog AS b WHERE a.gid = b.gid group by b.author");
$hidecommentNumQuery = $this->db->query("SELECT author,COUNT(*) AS total FROM " . DB_PREFIX . "comment AS a, " . DB_PREFIX . "blog AS b WHERE a.gid = b.gid and a.hide='y' group by b.author");
$twnumQuery = $this->db->query("SELECT author,COUNT(*) AS total FROM " . DB_PREFIX . "twitter group by author");
$dataHash = array(
'lognum' => array(),
'draftnum' => array(),
'commentnum' => array(),
'hidecommentnum' => array(),
'twnum' => array(),
);
while ($row = $this->db->fetch_array($logNumQuery)) {
$dataHash['lognum'][$row['author']] = $row['total'];
}
while ($row = $this->db->fetch_array($draftNumQuery)) {
$dataHash['draftnum'][$row['author']] = $row['total'];
}
while ($row = $this->db->fetch_array($commentNumQuery)) {
$dataHash['commentnum'][$row['author']] = $row['total'];
}
while ($row = $this->db->fetch_array($hidecommentNumQuery)) {
$dataHash['hidecommentnum'][$row['author']] = $row['total'];
}
while ($row = $this->db->fetch_array($twnumQuery)) {
$dataHash['twnum'][$row['author']] = $row['total'];
}
$query = $this->db->query("SELECT uid FROM " . DB_PREFIX . "user");
while ($row = $this->db->fetch_array($query)) {
$sta_cache[$row['uid']] = array(
'lognum' => isset($dataHash['lognum'][$row['uid']]) ? $dataHash['lognum'][$row['uid']] : 0,
'draftnum' => isset($dataHash['draftnum'][$row['uid']]) ? $dataHash['draftnum'][$row['uid']] : 0,
'commentnum' => isset($dataHash['commentnum'][$row['uid']]) ? $dataHash['commentnum'][$row['uid']] : 0,
'hidecommentnum' => isset($dataHash['hidecommentnum'][$row['uid']]) ? $dataHash['hidecommentnum'][$row['uid']] : 0,
'twnum' => isset($dataHash['twnum'][$row['uid']]) ? $dataHash['twnum'][$row['uid']] : 0
);
}
$cacheData = serialize($sta_cache);
$this->cacheWrite($cacheData, 'sta');
}
本文发布于2020年02月10日14:14
,已经过了1901天,若内容或图片失效,请留言反馈
转载请注明出处: 皮哈皮阿
本文的链接地址: https://blog.phpat.com/dev/493.html
-
emlog主题模板 beginning 更新至v2.6.1
最近更新:更新到v2.5.7
2017/08/02
-
element-ui Radio 单选框组件默认值选不中?
请求中为数字/布尔的字段要多加注意,类型问题会导致很多bug出现。
2019/02/12
-
基于emlog开发的微信小程序开源了
基于emlog开发的微信小程序
2018/01/18
-
emlog模版仿小米论坛版本: V2.0
仿小米论坛版本更新V2.0,本次暂时更新这样了,以后会持续更新优化的。
2012/08/07
-
element-ui el-table 表格疯狂抖动跳动不停
element-ui el-table 表格疯狂抖动跳动不停, 这究竟是道德的沦丧还是人性的毁灭.~~
2019/07/11
-
Windows7程序图标无法锁定到任务栏的解决办法
2012/07/19

4 年前

4 年前

2020-03-05 22:46
2020-03-06 08:37
2020-02-25 12:13
2020-02-25 12:42
2020-02-25 12:08
2020-02-25 12:41
emlog简约社区模版发布了。
今天的你,戴口罩了吗? 没戴?小心病毒安排你跳社会摇!🕺 记得勤洗手,冲掉坏运气~ 积极防护,保护自己,晴天咱们一起当人群里最靓的仔!✨
2019加油!钱包要鼓,头发要多,烦恼要少,快乐要爆。愿你工作摸鱼得潇洒,生活撒欢得漂亮!别怕,宇宙都在暗中支持你!
人生真的是多姿多彩
不是每朵白云,都会带来真情;不是每个拥抱,都会面带微笑;不是每次思念,都能立刻兑现;不是每个朋友,都在身边守候;不是每个日子,都逢良辰吉时。国庆节到了,愿你节日快乐!
昨天和今天有什么不同
经朋友提示,Beginning模板一周年了,恭喜。 好事总会发生,敬请期待更好的作品
beginning模板越来越好了[耶]
2018是个新的开始
“生命是属于每个人自己的感受,不属于任何别人的看法。”