Emlog调用数据库加速显示标签tag缓存优化方法

站长亲测Emlog文章标签缓存改为调用数据库代码挺好,站长在文章添页添加文章标签的时候发现修复标签缓存问题后,如果emlog的标签数量较大时,程序缓存的标签文件非常大,如果标签有很多甚至有可能达到几十兆,这明显是自己在给服务器施加压力。

如果在模板中添加了调用文章标签代码,每次进入文章页或者进入添加了文章标签代码的页面会非常卡,原因就是服务器需要去那个有可能几十兆的标签缓存文件中获取此文章的标签,每次访问服务器都要访问如此之大的文件,普通服务器怎么可能吃得消呢?

相信各位站长在数据量大的时候也会发现emlog程序在偷偷变卡吧?但是不知道是什么原因,小高在这里告诉大家就是这个原因,下面教大家是怎么解决的。

站长的解决办法就是将emlog程序自带的从缓存获取文章标签的代码废除,在模板中增加代码来解决,原理就是让大家每访问一个文章时就去数据库中查询一次标签,这样可以大大减少服务器的压力,觉得还是本地缓存调用比较快,但是经过测试证明,还是调用数据库比较快,这点针对国外服务器有着很好的效果,大家不妨试一试。

操作步骤

1、首先找到此文件:根目录/include/lib/cache.php,将以下代码注释掉;

private function mc_logtags() {
 $query = $this->db->query(\"SELECT gid FROM \" . DB_PREFIX . \"blog where type=\'blog\'\");
 $log_cache_tags = array();
 while ($row = $this->db->fetch_array($query)) {
 $logid = $row[\'gid\'];
 $tags = array();
 $tquery = \"SELECT tagname,tid FROM \" . DB_PREFIX . \"tag WHERE gid LIKE \'%,$logid,%\' or gid LIKE \'%,$logid%\' or gid LIKE \'%$logid,%\' or gid LIKE \'$logid\'\";
 $result = $this->db->query($tquery);
 while ($trow = $this->db->fetch_array($result)) {
 $trow[\'tagurl\'] = urlencode($trow[\'tagname\']);
 $trow[\'tagname\'] = htmlspecialchars($trow[\'tagname\']);
 $trow[\'tid\'] = intval($trow[\'tid\']);
 $tags[] = $trow;
 }
 $log_cache_tags[$logid] = $tags;
 unset($tags);
 }
 $cacheData = serialize($log_cache_tags);
 $this->cacheWrite($cacheData, \'logtags\');
 }

2、根目录:模板目录中的文件 /content/templates/模板文件夹名/module.php;

<?php
//blog:文章标签
function Tea_blog_tag($blogid){
 //调用数据库版标签
 $db = MySql::getInstance();
 $query = $db->query(\"SELECT gid FROM \".DB_PREFIX.\"blog where type=\'blog\' and gid=\'\".$blogid.\"\'\");
 while($row = $db->fetch_array($query)){
 $logid = $row[\'gid\'];
 $tags = array();
 $tquery = \"SELECT tagname,tid FROM \" . DB_PREFIX . \"tag WHERE gid LIKE \'%,\".$logid.\",%\' or gid LIKE \'%,\".$logid.\"\' or gid LIKE \'\".$logid.\",%\' or gid LIKE \'\".$logid.\"\'\" ;
 $result = $db->query($tquery);
 while ($trow = $db->fetch_array($result)) {
 $trow[\'tagurl\'] = urlencode($trow[\'tagname\']);
 $trow[\'tagname\'] = htmlspecialchars($trow[\'tagname\']);
 $trow[\'tid\'] = intval($trow[\'tid\']);
 $tags[] = $trow;
 }
 }
 if(!empty($tags)){
 foreach ($tags as $value){
 echo \'<a href=\"\'.Url::tag($value[\'tagurl\']).\'\" title=\"\'.$value[\'tagname\'].\'\">\'.$value[\'tagname\'].\'</a>\';
 }
 }else{
 echo \'<a>无标签</a>\';
 }
}
?>

3、以上工作完成后,在你想要添加文章标签的地方添加代码:

<?php Tea_blog_tag($logid);/*$logid*/?>
THE END