在使用Typecho时,难免会遇到有些模板或插件使用了cdn.jsdelivr.net的地址,但是这也会导致他在国内加载奇慢,甚至加载失败,影响使用体验。
当然,此方法适用于几乎一切php程序,也可以用于替换gravatar等国内不方便使用的程序为镜像源。

提一嘴,我前段时间自己建了一个gravatar镜像站:https://tencent.com.kg/avatar

这里使用的jsdeliver镜像源是:jsd.cdn.zzko.cn。

上代码

前台

注意⚠️原始地址的空格请注意去掉 因为我网站会自动替换掉地址

index.php

我将一些与文章无关的魔改删除了,因此可能看起来比较别扭。但是他能用,那就不管了。
如果想知道我改了什么,可以看看其他文章。

<?php
/**
 * Typecho Blog Platform
 *
 * @copyright  Copyright (c) 2008 Typecho team (http://www.typecho.org)
 * @license    GNU General Public License 2.0
 * @version    $Id: index.php 1153 2009-07-02 10:53:22Z magike.net $
 */
// 开始加入缓冲区
ob_start();

/** 载入配置支持 */
if (!defined('__TYPECHO_ROOT_DIR__') && !@include_once 'config.inc.php') {
    file_exists('./install.php') ? header('Location: install.php') : print ('Missing Config File');
    exit;
}

/** 初始化组件 */
\Widget\Init::alloc();

/** 注册一个初始化插件 */
\Typecho\Plugin::factory('index.php')->begin();

/** 开始路由分发 */
\Typecho\Router::dispatch();

/** 注册一个结束插件 */
\Typecho\Plugin::factory('index.php')->end();

// 获取输出缓冲区的内容
$output = ob_get_contents();

// 清空缓冲
ob_end_clean();

// 压缩
$compressedOutput = compressHtml($output);

// 输出压缩后的代码
echo $compressedOutput;

function compressHtml($html)
{
    $compressedHtml = str_replace('https://cdn.jsdelivr .net/', 'https://jsd.cdn.zzko.cn/', $html);

    return $compressedHtml;
}

后台

admin/header.php

我也忘了有没有修改,看着办就是了。

<?php
if (!defined('__TYPECHO_ADMIN__')) {
    exit;
}

// 开始加入缓冲区
ob_start();

$header = '<link rel="stylesheet" href="' . $options->adminStaticUrl('css', 'normalize.css', true) . '">
<link rel="stylesheet" href="' . $options->adminStaticUrl('css', 'grid.css', true) . '">
<link rel="stylesheet" href="' . $options->adminStaticUrl('css', 'style.css', true) . '">';

/** 注册一个初始化插件 */
$header = \Typecho\Plugin::factory('admin/header.php')->header($header);

?><!DOCTYPE HTML>
<html>
    <head>
        <meta charset="<?php $options->charset(); ?>">
        <meta name="renderer" content="webkit">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
        <title><?php _e('%s - %s - Powered by Typecho', $menu->title, $options->title); ?></title>
        <meta name="robots" content="noindex, nofollow">
        <?php echo $header; ?>
    </head>
    <body<?php if (isset($bodyClass)) {echo ' class="' . $bodyClass . '"';} ?>>

admin/footer.php

同上。

<?php if(!defined('__TYPECHO_ADMIN__')) exit; ?>
<?php \Typecho\Plugin::factory('admin/footer.php')->begin(); ?>
    </body>
</html>
<?php
/** 注册一个结束插件 */
\Typecho\Plugin::factory('admin/footer.php')->end();

// 获取输出缓冲区的内容
$output = ob_get_contents();

// 清空缓冲
ob_end_clean();

// 压缩
$compressedOutput = compressHtml($output);

// 输出压缩后的代码
echo $compressedOutput;

function compressHtml($html)
{
// 后台防止出错+数据量不大 不卡 就不压缩了,只做替换处理。
    $compressedHtml = str_replace('https://cdn.jsdelivr .net', 'https://jsd.cdn.zzko.cn/', $html);

    return $compressedHtml;
}

题外话

休息一下,回忆录暂时先不写了,无聊还是会来写几句的,但不会集中精力在这上面.