Typecho/Wordpress 等动态程序免插件实现首页生成静态 HTML
本文最后更新于 2020-05-19【1801 天前】,文中所描述的信息可能已发生改变,请谨慎使用。如有问题或建议,欢迎在文章底部留言参与讨论!
再好的网站,如果打开速度过慢,可能大部分都不会等到页面加载完就选择右上角离开,提升网站页面加载速度的一个非常重要的优化方法便是静态化。而作为网站门面的首页,访问量相对比其他页面要大的多,实现静态化提升速度显得更加重要。
前言
Typecho、WordPress 等动态程序的页面内容的生成依赖后台对数据的查询 (在不加 Redis/Memecache 等数据库缓存下),其访问速度天然地比静态页面要慢,那么实现静态化就是最直接有效的网站速度优化方法。
对于这些程序而言,一般都会有开发者提供插件进行实现页面的静态化,在这里,我们可以仅对首页实现静态化,而不必借助插件。具体的实现方法非常简单,仅需一个简短的 php
文件即可实现。
创建生成静态化脚本文件
在网站根目录下创建一个 cache.php
文件,其内容如下:
<?php
/* https://www.imtqy.com/cache-index.html */
$nowtime=time();
$pastsec = $nowtime - $_GET["t"];
if($pastsec<600)
{
exit; /* 10分钟更新一次,时间可以自己调整 */
}
ob_start(); /* 打开缓冲区 */
include("index.php");
$content = ob_get_contents(); /* 得到缓冲区的内容 */
$content .= "\n<script language=javascript src=\"cache.php?t=".$nowtime."\"></script>"; /* 加上调用更新程序的代码 */
file_put_contents("index.html",$content);
if (!function_exists("file_put_contents"))
{
function file_put_contents($fn,$fs)
{
$fp=fopen($fn,"w+");
fputs($fp,$fs);
fclose($fp);
}
}
?>
其实文件名可以任意修改,但要注意的是,文件名需和代码中提到的文件名一致!
代码文件来自于:https://itlu.org/articles/1857.html
访问并生成静态化首页
为了测试是否成功,我们可以人为的访问该文件,使其生成首页的静态化文件 index.html
,访问地址为网站域名/cache.php
,如本站访问地址为 https://www.imtqy.com/cache.php
查看网站根目录,是否生成了 index.html
文件,如有,则表明正确生成了静态化的首页文件。
配置优先级使静态页面生效
最后,我们还需要在网站的 Web 服务器的站点配置文件中,将 index.html
的优先级调整到比 index.php
高,对于 nginx
而言,即将网站的配置 conf
文件中,在表明网站首页的配置中(即以 index
开头的那行 ),让 index.html
在 index.php
前面即可。如
index index.html index.htm index.php
而对于 Apache
,则修改 DirectoryIndex
说明
该方法不仅仅适用于 Typecho/Wordpress 等程序的首页静态化,理论上对于其他的任何的动态程序的首页都可以实现静态化,进而优化网站访问。
有网友提到这套代码容易被人利用实现 CC 攻击,可以采用优化版的静态化程序:https://gist.github.com/yusureabc/34564707391b6275864b94b3cdc0088f
<?php
/**
* 首页静态化脚本
* Author: Yusure
* Blog: http://yusure.cn/php/202.html 、
* https://gist.github.com/yusureabc/34564707391b6275864b94b3cdc0088f
*/
ini_set( 'date.timezone', 'PRC' );
/* 缓存过期时间 单位:秒 */
$expire = 600;
/* 主动刷新密码 格式:http://test.com/cache.php?password=123456 */
$password = '123456';
$file_time = @filemtime( 'index.html' );
time() - $file_time > $expire && create_index();
isset( $_GET['password'] ) && $_GET['password'] == $password && create_index();
/**
* 生成 index.html
*/
function create_index()
{
ob_start();
include( 'index.php' );
$content = ob_get_contents();
$content .= "\n<!-- Create time: " . date( 'Y-m-d H:i:s' ) . " -->";
/* 调用更新 */
$content .= "\n<script language=javascript src='cache.php'></script>";
ob_clean();
$res = file_put_contents( 'index.html', $content );
if ( $res !== false )
{
die( 'Create successful' );
}
else
{
die( 'Create error' );
}
}
这个版本相比于之前的在于主动生成需要密码,否则只能根据文件是否过期来生成静态文件。
因文章设置了复制长度限制,提供脚本文件下载地址:
蓝奏云:https://qytang.lanzous.com/icslepa
密码:6666
解压密码:imtqy.com
本文作者:Quanyin Tang
本文链接:Typecho/Wordpress 等动态程序免插件实现首页生成静态 HTML - https://www.imtqy.com/cache-index.html
版权声明:如无特别声明,本文即为原创文章,仅代表个人观点,版权归 Quanyin 所有,未经允许禁止转载,经授权转载请注明出处!
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
使用CloudFlare的话,就没有这个必要了,还更加的安全!
制作个插件一键安装就方便了
代码复制不了
文章已经更新,可以直接下载
蓝奏云:https://qytang.lanzous.com/icslepa
密码:6666
解压密码:imtqy.com