Typecho生成首页静态HTML数倍提高网站打开速度

介绍

最近感觉博客打开速度慢了不少,测试来看均值基本都在3秒以上,因为博客上有不少的CSSJS加载速度也就慢了下来,并且本博客没有做图站分离,都是放在一起的,速度确实较慢;
于是给首页做了个静态HTML,首页打开速度确实提升了数倍,需要的朋友也可以试试;
未做静态HTML前的打开测试

生成静态HTML后的打开测试

对比可以看出提升确实比较大,从均值3.5秒提升到了1秒以内,相当满意了;

开始

这里提供两个PHP代码脚本,一个是不需要密码的,一个是需要密码的;
首先在网站根目录新建一个php文件,文件命名为:jingtai.php
然后在其中写入需要的代码(不需要密码和需要密码的选择其中一个即可)
不需要密码的PHP脚本

<?php
$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=\"jingtai.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);  
}
}
?>

需要要密码的PHP脚本

<?php
/**
 * 首页静态化脚本
 */
ini_set( 'date.timezone', 'PRC' );

/* 缓存过期时间 单位:秒 */
$expire = 600;
/* 主动刷新密码  格式:https://你的域名/jingtai.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='jingtai.php'></script>";
    ob_clean();
    $res = file_put_contents( 'index.html', $content );
    if ( $res !== false )
    {
        die( 'Create successful' );
    }
    else
    {
        die( 'Create error' );
    }
}

保存为utf8编码后退出;
注意:如果使用的宝塔面板,还要在后台网站设置-默认文档-将index.html的排序上调至第一位
然后在浏览器中打开PHP脚本链接即可
打开链接后会在网站根目录下生成一个index.html的静态文件,首页静态化也就完成了;
不需要密码脚本的链接:https://你的域名/jingtai.php
需要密码脚本的链接:https://你的域名/jingtai.php?password=123456

说明

两个PHP脚本中的更新时间默认为600秒,也就是十分钟更新一次,默认密码为123456
更新时间及访问密码都可以自行设定,修改脚本中的数值即可;

验证

查看是否生效,浏览器中重新打开你的网站首页,右键查看源代码
不需要密码的脚本
在最后一行如果有<script language=javascript>...之类的字眼,说明你访问的就是index.html的页面
需要密码的脚本
在最后一行会有显示最后一次更新时间
<!-- Create time: 2020-03-09 00:33:41 -->
<script language=javascript src='jt_index.php'></script>

当然也可以测试工具进行网站打开测试;
网站测试:https://www.boce.com/tool

发表评论

32 条评论

  1. okfree

    第一个无密码的有结尾?>
    第二个无?>
    正常吗

  2. moer

    可以请问一下这个自动刷新的功能是怎么实现的吗,没看懂代码怎么会自动调用更新

  3. 小优

    博主,为什么我生成的html页面没问题 但是,访问网站确是乱码啊~ 在线等,急~

    1. sunpma
      @小优

      每个网站程序不一样,需要自行测试是否合适,一般来说Typecho应该都适用

      1. 小优
        @sunpma

        站点:http://youke0.xyz

      2. 小优
        @sunpma

        那可以取消吗?我现在站点都是乱码了,我想取消算了! 可以取消吗?我把那个文件和生成的html删了站点没有变化,求解决!

        1. sunpma
          @小优

          将生成的index.html和jingtai.php文件删除,如果调整了index.html序位再调回来即可,也有可能是浏览器缓存的问题,清除浏览器缓存再试试

          1. 小优
            @sunpma

            好了,好了,我把资源重新整理缓存多清理几次恢复了,谢谢博主,麻烦您了~

          2. 小优
            @sunpma

            已经删除了,清除缓存完访问后页面还有script引入 页面没有恢复,(ó﹏ò。)

          3. 小优
            @sunpma

            好,我去试试,感谢!

  4. yanx1n

    博主,可以给我你的QQ吗,我想请教你个问题

    1. sunpma
      @yanx1n

      QQ基本不用了,TG:@sunpma

  5. 公益图床

    设置后打开php链接后没自动生成html文件

    1. sunpma
      @公益图床

      检查下代码中的路径名是否正确,一般都是路径名错误

      1. 公益图床
        @sunpma

        路径是对的

  6. tnjc

    https://s2.ax1x.com/2019/10/15/KCZoZD.jpg

    1. sunpma
      @tnjc

      我自己测试过,没有问题,你检查下代码有问题没

      1. tnjc
        @sunpma

        哦哦,原来里面也要改,搞定了,谢谢!

        1. sunpma
          @tnjc

          OK~

  7. tnjc

    是不是少加了什么

  8. tnjc

    那有什么搭建图床的建议吗?

    1. sunpma
      @tnjc

      可以看看这个https://sunpma.com/127.html我比较喜欢,主要的简单,使用方便,还有一些界面好看的,但使用没有这个使用方便

      1. tnjc
        @sunpma

        只是为了方便测试设置两秒,默认等了二十多分钟也没更新,这样更新文章也显示不了
        <script language=javascript src="f5.php?t=1571120375"></script>

        1. sunpma
          @tnjc

          这个代码前几天修改过,你是用的现在的吗?还有你将php文件名改成了f5,那代码中的路径名也要修改哦

      2. tnjc
        @sunpma

        我设置了两秒没有自动更新

        1. sunpma
          @tnjc

          先查看源代码是否设置成功,话说2秒是不是太短了~~~

          1. tnjc
            @sunpma

            <script language=javascript src="f5.php?t=1571120375"></script>

      3. tnjc
        @sunpma

        if($pastsec<2) 这样子设置 好像不会自动更新

  9. tnjc

    谢谢大佬回复,可以自己搭建,但是我用的是frp内网穿透,可能域名会变,这样图片地址就失效了,有想过用现成的,但是怕失效,还有备份图片。

    1. sunpma
      @tnjc

      重要的图片还是建议本地和网络同时备份,毕竟数据无价,图床程序不是永久保存的选择,只是用来分享的

  10. tnjc

    有没有什么好的图床分享一下吗?

    1. sunpma
      @tnjc

      不知道你说的是现成的图床还是图床程序?博主自己的图床tu.sunpma.com