为什么这么做

经典开头,不再重复无聊,在博客首页按了一下Ctrl+U,然后发现网站首页代码长达1045行,并且有特别多空行。
这样也会影响速度,但是应该影响不大。既然连Typecho都上Redis了,那就把他优化到极致吧。
压缩后,页面仅剩370行。

写代码

AI真好用 他给我返回了一个函数:

function compressHtml($html)  
{  
    $pattern = '/<pre>(.*?)<\/pre>/s';  
    preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);  
      
    // 创建唯一的占位符并替换 <pre>...</pre> 块  
    $placeholders = [];  
    foreach ($matches as $match) {  
        $placeholder = '<!--PRE_PLACEHOLDER_' . md5($match[0]) . '-->';  
        $placeholders[$placeholder] = $match[0];  
        $html = str_replace($match[0], $placeholder, $html);  
    }  
      
    // 压缩剩余的 HTML 代码  
    $compressedHtml = preg_replace('/>\s+</', '><', $html);  
    $compressedHtml = preg_replace('/<!--(?!PRE_PLACEHOLDER_).*?(?!--)>/', '', $compressedHtml);  
      
    // 将占位符替换回原始的 <pre>...</pre> 块  
    foreach ($placeholders as $placeholder => $content) {  
        $compressedHtml = str_replace($placeholder, $content, $compressedHtml);  
    }  
      
    // 移除可能残留的占位符标记  
    $compressedHtml = preg_replace('/<!--PRE_PLACEHOLDER_.*?-->/', '', $compressedHtml);  
    $compressedHtml = str_replace('-->', '', $compressedHtml);  
      
    return $compressedHtml;  
}  

解释一下:这里我给AI的提示是让他自动跳过了Pre标签和Script标签,因为压缩这个多多少少有点问题,偷点懒,干脆跳过了。
那我们只需要将typecho输出的代码先保存到缓冲区,然后调用这个函数 最后输出就可以了。
下面是我的完整index.php代码,注意:我的代码中10~12行为上上篇文章的内容,如果您没有使用请注意删除。

<?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 $
 */

// 添加统计来源
$_ref_include = true;
require '_ref.php';

// 开始加入缓冲区
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)  
{  
    $pattern = '/<pre>(.*?)<\/pre>/s';  
    preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);  
      
    // 创建唯一的占位符并替换 <pre>...</pre> 块  
    $placeholders = [];  
    foreach ($matches as $match) {  
        $placeholder = '<!--PRE_PLACEHOLDER_' . md5($match[0]) . '-->';  
        $placeholders[$placeholder] = $match[0];  
        $html = str_replace($match[0], $placeholder, $html);  
    }  
      
    // 压缩剩余的 HTML 代码  
    $compressedHtml = preg_replace('/>\s+</', '><', $html);  
    $compressedHtml = preg_replace('/<!--(?!PRE_PLACEHOLDER_).*?(?!--)>/', '', $compressedHtml);  
      
    // 将占位符替换回原始的 <pre>...</pre> 块  
    foreach ($placeholders as $placeholder => $content) {  
        $compressedHtml = str_replace($placeholder, $content, $compressedHtml);  
    }  
      
    // 移除可能残留的占位符标记  
    $compressedHtml = preg_replace('/<!--PRE_PLACEHOLDER_.*?-->/', '', $compressedHtml);  
    $compressedHtml = str_replace('-->', '', $compressedHtml);  
      
    return $compressedHtml;  
}