开通VIP,畅享全站资源免费下载!

[Emlog优化]缓存文件优化 加快文章发布速度 加快缓存速度

【摘要】 今天优选资源网站长继续分享Emlog网站优化,如何加快网站的缓存速度,加快文章发布速度,前一篇文章讲了很粗暴的方法,简单有效,但是这样是不符合业务逻辑的,有的数据是需要缓存数据,若缓存数据更新不...

今天优选资源网站长继续分享Emlog网站优化,如何加快网站的缓存速度,加快文章发布速度,前一篇文章讲了很粗暴的方法,简单有效,但是这样是不符合业务逻辑的,有的数据是需要缓存数据,若缓存数据更新不及时,那么就会出现一些数据延迟的情况!

EMLOG优化缓存.jpg

因此,应该针对性的更新缓存!

1. 加快缓存速度:

Emlog是基于PHP+MYSQL的运行环境,那么缓存来源于MYSQL数据库,加快缓存速度,就是要加快MYSQL的查询速度

针对MYSQL的查询优化,有建索引等等,还有重要一点“SELECT * ”类似这样的SQL查询语句要少用

当表内某字段存在“NULL”值时,查询就会很慢,当数据量大了之后会更慢!

所以有两个优化方向,尽量减少数据库中的NULL值(空字符串)

其二就是优化SQL查询语句,建立索引

那么针对EMLOG缓存,我们就可以针对性优化

优选资源网的优化就需要在用户表数据这里处理,因为用户过多导致用户缓存数据特别慢

为此来到“include\lib\cache.php”第92行的用户数据缓存这里,代码如下:

/**
 * 用户信息缓存
 */
private function mc_user() {
$user_cache = array();
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "user");
while ($row = $this->db->fetch_array($query)) {
    $photo = array();
    $avatar = '';
    if(!empty($row['photo'])){
        $photosrc = str_replace("../", '', $row['photo']);
        $imgsize = chImageSize($row['photo'], Option::ICON_MAX_W, Option::ICON_MAX_H);
        $photo['src'] = htmlspecialchars($photosrc);
        $photo['width'] = $imgsize['w'];
        $photo['height'] = $imgsize['h'];

        $avatar = strstr($photosrc, 'thum') ? str_replace('thum', 'thum52', $photosrc) : preg_replace("/^(.*)\/(.*)$/", "\$1/thum52-\$2", $photosrc);
        $avatar = file_exists('../' . $avatar) ? $avatar : $photosrc;
    }
    $row['nickname'] = empty($row['nickname']) ? $row['username'] : $row['nickname'];
    $user_cache[$row['uid']] = array(
        'photo' => $photo,
        'avatar' => $avatar,
        'name_orig' => $row['nickname'],
        'name' => htmlspecialchars($row['nickname']),
        'mail' => htmlspecialchars($row['email']),
        'des' => htmlClean($row['description']),
        'ischeck' => htmlspecialchars($row['ischeck']),
        'role' => $row['role'],
        );
}
$cacheData = serialize($user_cache);
$this->cacheWrite($cacheData, 'user');
}

我们将这条代码改为:

// 原代码
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "user");

// 改为下面这样
$query = $this->db->query("SELECT uid,username,nickname,role,ischeck,photo,email,description FROM " . DB_PREFIX . "user");

大家需要针对自己的数据库表字段,去查询必须的数据字段名

另外,我们发现其下还有这样的代码:

if(!empty($row['photo'])){
    $photosrc = str_replace("../", '', $row['photo']);
    $imgsize = chImageSize($row['photo'], Option::ICON_MAX_W, Option::ICON_MAX_H);
    $photo['src'] = htmlspecialchars($photosrc);
    $photo['width'] = $imgsize['w'];
    $photo['height'] = $imgsize['h'];

    $avatar = strstr($photosrc, 'thum') ? str_replace('thum', 'thum52', $photosrc) : preg_replace("/^(.*)\/(.*)$/", "\$1/thum52-\$2", $photosrc);
    $avatar = file_exists('../' . $avatar) ? $avatar : $photosrc;
}

会有一个chImageSize(),这个函数用于更改图片的形状(长和宽),其实是没必要去获取图片的缩略图,用户的头像照片大小其实不需要在意,带宽高一点就好了

为此将用户缓存的代码改为这样就好了:

/**
 * 用户信息缓存
 */
private function mc_user() {
    $user_cache = array();
    $query = $this->db->query("SELECT uid,username,nickname,role,ischeck,photo,email,description FROM " . DB_PREFIX . "user");
    while ($row = $this->db->fetch_array($query)) {
        // $photo = array();
        /*
        $avatar = '';
        if(!empty($row['photo'])){
            $photosrc = str_replace("../", '', $row['photo']);
            $imgsize = chImageSize($row['photo'], Option::ICON_MAX_W, Option::ICON_MAX_H);
            $photo['src'] = htmlspecialchars($photosrc);
            $photo['width'] = $imgsize['w'];
            $photo['height'] = $imgsize['h'];

            $avatar = strstr($photosrc, 'thum') ? str_replace('thum', 'thum52', $photosrc) : preg_replace("/^(.*)\/(.*)$/", "\$1/thum52-\$2", $photosrc);
            $avatar = file_exists('../' . $avatar) ? $avatar : $photosrc;
        }*/
        $row['nickname'] = empty($row['nickname']) ? $row['username'] : $row['nickname'];
        $user_cache[$row['uid']] = array(
            'photo' => $row['photo'],
            'avatar' => $row['photo'],
            'name_orig' => $row['nickname'],
            'name' => htmlspecialchars($row['nickname']),
            'mail' => htmlspecialchars($row['email']),
            'des' => htmlClean($row['description']),
            'ischeck' => htmlspecialchars($row['ischeck']),
            'role' => $row['role'],
            );
    }
    $cacheData = serialize($user_cache);
    $this->cacheWrite($cacheData, 'user');
}

这样就优化好了用户数据的缓存!

2. 针对性优化缓存:

之前文章我们是去掉了缓存,其实这样会造成很多BUG,更新发布文章的时候,有必要针对性的更新缓存

为此在“admin\save_log.php”文件第66行的代码改为:

// 源代码
$CACHE->updateCache();

// 修改为:
$CACHE->updateCache(array('sta', 'tags', 'newlog', 'logsort', 'logtags'));

OK,这样就可以很好解决了~

在Emlog的核心文件中很多地方重复调用更新缓存,或者更新没必要的缓存数据的地方,都是不必要的,大家需要自行修改哦!

优选资源网原创不易,转载请注明来源优选资源网超链接,感谢各位!

版权声明:《 [Emlog优化]缓存文件优化 加快文章发布速度 加快缓存速度 》为作者优选资源网原创文章,转载请注明原文地址!
最后编辑:2020-2-22 05:02:15
分享到:
赞(8)
发表评论 / Comment

用心评论~

金玉良言 / Appraise
明月清风LV2游客
2020-06-20 06:11
我修改后发现前台的头像不显示了,该如何解决?
小東LV2游客
2020-03-06 09:59
根据站长改了网站就错误了怎么办,66行没有那个代码啊,在其他行发现有怎么解决那个是
头像
优选资源网站长已认证 SSVIP(终身)
2020-03-06 11:24
@小東:这是基于EMLOG6.0来修改的,只要是代码一样就都可以修改,欢迎继续留言提问~
头像
小東LV2游客
2020-03-06 20:20
@优选资源网:你不是原创!我找到原创了
头像
优选资源网站长已认证 SSVIP(终身)
2020-03-07 16:33
@小東:。。。。我还不是原创?你去emlog论坛看看我是谁?麻烦说话不要太稚嫩了!
头像
优选资源网站长已认证 SSVIP(终身)
2020-03-07 16:35
@小東:影响我心情。。。
头像
优选资源网站长已认证 SSVIP(终身)
2020-03-07 16:36
@小東:我对你客气、好心,你还恶语相向?小学生?FUCK!
头像
小東LV2游客
2020-03-07 19:20
@优选资源网:我就说“我找到原创了”,我哪里恶语了,兄弟注意素质,你这句小学生我笑了,哈哈哈
头像
优选资源网站长已认证 SSVIP(终身)
2020-03-07 23:49
@小東:谁和你成为兄弟,那真倒了大霉!说话没水平,不懂感激!
头像
小東LV2游客
2020-03-08 12:41
@优选资源网:看你这“打字”你是一网络键盘侠吧!我拿你妈了还感激!你还用的上“水平”?真是键盘高手!
一上来就乱咬人的小学生,请注意下素质ok!
头像
优选资源网站长已认证 SSVIP(终身)
2020-03-11 13:45
@小東:年少无知就算了,还无能?
头像
莫子熙LV1游客
2020-03-24 03:58
@优选资源网:我看那个人就说你不是原创,你就喷了你是心虚还是什么??
头像
莫子熙LV1游客
2020-03-24 03:59
@优选资源网:我看前边对你也没什么恶语,你这站长找喷的?然后再把自己说的多没有泥?
头像
日主题LV3 VIP(月费)
2020-04-29 23:39
@优选资源网:站长辛苦写文章,还被人说三道四,确实很糟心,看站长写了这么多,还是有人故意唱反调,这人确实有问题
头像
ityLV1游客
2020-04-11 16:35
@小東:智障吧这人?
神奇阿拉蕾LV1游客
2020-02-23 09:11
实力技术站长,支持!
LV1游客
2020-02-22 19:58
非常感谢
晨曦LV1游客
2020-02-22 12:44
火速给一波ip支持原创
头像
优选资源网站长已认证 SSVIP(终身)
2020-02-22 13:05
@晨曦:爱你么么哒~