[Emlog優化]緩存文件優化 加快文章發佈速度 加快緩存速度

今天優選資源網站長繼續分享Emlog網站優化,如何加快網站的緩存速度,加快文章發佈速度,前一篇文章講了很粗暴的方法,簡單有效,但是這樣是不符合業務邏輯的,有的數據是需要緩存數據,若緩存數據更新不及時,那麼就會出現一些數據延遲的情況

 

EMLOG優化緩存.jpg
Emlog緩存優化教程

因此,應該針對性的更新緩存!

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的核心文件中很多地方重複調用更新緩存,或者更新沒必要的緩存數據的地方,都是不必要的,大家需要自行修改哦!

優選資源網原創不易,轉載請註明來源優選資源網超鏈接,感謝各位!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章