Typecho 加快后台打开速度

  • 无毒有藕 2024年12月01日 185阅读 0评论
  • 每次打开 Typecho 后台时,都有明显的卡顿,在没有读取完成(官方最新日志)之前,点击控制台的任何链接都没反应,需要等待至少 3~5 秒钟,数据加载显示后,所点击的链接页面才会打开。于是,琢磨出本文档,把(官方最新日志)的数据缓存到本地文件中,在指定的有效期内,通过加载缓存文件的数据,加快后台打开速度。嗯,反正官方最新日志也不常更新。

    涉及文件

    admin/index.php
    var/Widget/Ajax.php

    方法一:

    打开文件 admin/index.php 找到第 115 行的如下代码:

     html = cache ? cache.getItem('feed') : '',

    将以上代码替换为以下代码:

    html = '',

    打开文件 var/Widget/Ajax.php 搜索找到 function feed() 将函数 {...} 内的所有代码,替换为以下代码(留意注释,以及按需修改):

    $cacheFilePath = __TYPECHO_ROOT_DIR__ . '/usr/cache/Typecho_feed_cache.json'; // 将官方最新日志数据存储在 usr/cache 目录的 Typecho_feed_cache.json 文件中,自行修改
        $cacheExpiration = 180*24*60*60; // 缓存半年,自行修改
    
        if (file_exists($cacheFilePath) && (time() - filemtime($cacheFilePath)) < $cacheExpiration) {
            $data = json_decode(file_get_contents($cacheFilePath), true);
            $this->response->throwJson($data);
        } else {
            $this->user->pass('subscriber');
            $client = Client::get();
            if ($client) {
                $client->setHeader('User-Agent', $this->options->generator)
                    ->setTimeout(10)
                    ->send('https://typecho.org/feed/');
    
                // 匹配内容体
                $response = $client->getResponseBody();
                preg_match_all(
                    "/<item>\s*<title>([^>]*)<\/title>\s*<link>([^>]*)<\/link>\s*<guid>[^>]*<\/guid>\s*<pubDate>([^>]*)<\/pubDate>/is",
                    $response,
                    $matches
                );
    
                $data = [];
    
                if ($matches) {
                    foreach ($matches[0] as $key => $val) {
                        $data[] = [
                            'title' => $matches[1][$key],
                            'link'  => $matches[2][$key],
                            'date'  => date('n.j', strtotime($matches[3][$key]))
                        ];
    
                        if ($key > 8) {
                            break;
                        }
                    }
                }

    注意:以上代码中,未对存储文件夹做是否可写的判断,所以,请确保文件夹可以创建缓存文件。

    至此,在首次访问控制台时,官方最新日志数据会缓存到指定目录指定文件中,并在有效期内从缓存文件获取数据,加快后台打开速度。

    方法二:
    以上方法不能及时获取官方最新日志数据,需要在缓存文件有效期过后才能更新,可以使用以下方法:通过手动点击获取数据,避免打开页面时自动获取,也不需要生成缓存文件。

    涉及文件:
    admin/index.php
    打开文件 admin/index.php 找到第 113 行的 JS 代码:

     $(document).ready(function () {
            // 原有的声明变量代码,保持不变
    
            ul.html('<li><button id="loadData">点击读取数据</button></li>'); // 添加按键
    
            $('#loadData').click(function() { // 点击按键后,再执行原有的获取数据代码
    
                // 原有的获取数据代码,保持不变
    
            });
        });

    至此,在打开后台时,不会自动获取数据,在点击按键后,再手动获取数据。

    方法三:
    涉及文件
    var/Widget/Ajax.php
    打开文件 var/Widget/Ajax.php 找到(两处)以下代码:

    setTimeout(10)
    
    将以上代码的时间 10 改为 1
    0
    打赏

    —— 评论区 ——

    昵称
    邮箱
    网址
    取消