为什么这么做
经典开头,不再重复无聊,在博客首页按了一下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;
}