介绍:文章提供了三种方法来加快 Typecho 后台打开速度。方法一是将官方最新日志数据缓存到本地文件中,有效期内加载缓存文件数据以加快后台打开速度;方法二是手动点击获取数据,避免自动获取并生成缓存文件;方法三是修改 Ajax 请求的超时时间为1秒以加快数据获取速度。通过这些方法,能有效减少后台打开时的卡顿等待时间。
每次打开 Typecho 后台时,都有明显的卡顿,在没有读取完成(官方最新日志)之前,点击控制台的任何链接都没反应,需要等待至少 3~5 秒钟,数据加载显示后,所点击的链接页面才会打开。于是,琢磨出本文档,把(官方最新日志)的数据缓存到本地文件中,在指定的有效期内,通过加载缓存文件的数据,加快后台打开速度。嗯,反正官方最新日志也不常更新。
涉及文件
admin/index.php
var/Widget/Ajax.php
方法一:
打开文件 admin/index.php 找到第 115 行的如下代码:
{hide}
html = cache ? cache.getItem('feed') : '',
{/hide}
将以上代码替换为以下代码:
{hide}
html = '',
{/hide}
打开文件 var/Widget/Ajax.php 搜索找到 function feed() 将函数 {…} 内的所有代码,替换为以下代码(留意注释,以及按需修改):
{hide}
$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;
}
}
}
{/hide}
注意:以上代码中,未对存储文件夹做是否可写的判断,所以,请确保文件夹可以创建缓存文件。
至此,在首次访问控制台时,官方最新日志数据会缓存到指定目录指定文件中,并在有效期内从缓存文件获取数据,加快后台打开速度。
方法二:
以上方法不能及时获取官方最新日志数据,需要在缓存文件有效期过后才能更新,可以使用以下方法:通过手动点击获取数据,避免打开页面时自动获取,也不需要生成缓存文件。
涉及文件:
admin/index.php
打开文件 admin/index.php 找到第 113 行的 JS 代码:
{hide}
$(document).ready(function () {
// 原有的声明变量代码,保持不变
ul.html('<li><button id="loadData">点击读取数据</button></li>'); // 添加按键
$('#loadData').click(function() { // 点击按键后,再执行原有的获取数据代码
// 原有的获取数据代码,保持不变
});
});
{/hide}
至此,在打开后台时,不会自动获取数据,在点击按键后,再手动获取数据。
方法三:
涉及文件
var/Widget/Ajax.php
打开文件 var/Widget/Ajax.php 找到(两处)以下代码:
{hide}
setTimeout(10)
将以上代码的时间 10 改为 1
{/hide}
文章来源:https://www.xyjzy.com/archives/4646.html
最新评论
下载地址呢
没有下载?
这篇文章写得深入浅出,让我这个小白也看懂了!
这个确实很实用,工作中会经常遇到这个问题。
这个教程还是比较实用的,希望可以对大家有点用。