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

发表评论 取消回复

55 条评论

  1. 运维学习笔记

    没理解缓存时间是啥意义,用crontab定时运行一下jingtai.php不就不需要这个缓存时间了!

  2. we11a

    我添加后无法使用搜索功能了怎么解决阿

    1. sunpma
      @we11a

      https://sunpma.com/674.html#%E4%B8%89%E5%8D%81%E4%B8%83%EF%BC%9A%E4%BF%AE%E5%A4%8D%E6%90%9C%E7%B4%A2%E6%A1%86%E6%8C%89%E9%92%AE

  3. 火喵

    非常好的文章,申请转载一下,另外静态主页之后,主页的twikoo就不显示了是怎么回事呀

    1. 火喵
      @火喵

      原来是可以的,我理解错了,感谢教程,没毛病∠( ᐛ 」∠)_

  4. Chocho

    能不能详细指导一下把index.html文件改成首页,我已经创建了但是不知道怎么改成首页。

    1. sunpma
      @Chocho

      如果使用的宝塔面板,在网站设置-默认文档-将index.html的排序上调至第一位

  5. 深海里的鱼

    大哥你设置的是8分钟自动更新的吧。。。

  6. 芒果

    这个挺好,不过给不懂代码的小白提个醒,需要密码的版本是不能自动刷新的。现在的写法是必须传参数password,而js中并没有指定参数所以自动刷新会失效。想自动刷新的话请选择不需要密码的版本。这个没办法,js是明码,写在js里也跟明码一样了。

    1. 芒果
      @芒果

      不好意思看漏了,当我没说。带密码的自动刷新时不需要密码的,没问题。

  7. AKERS

    首页生成静态后,首页的搜索功能失效了,搜索后还是在首页。这个怎么搞,我是小灯泡主题按照你提示的我去查了下没有。。。

  8. 青鸟

    首页生成静态后,首页的搜索功能失效了,搜索后显示405

    1. sunpma
      @青鸟

      我的并没有啥大问题,输入内容后回车或点击搜索按钮即可正常搜索
      你的如果有问题可以参考下搜索框修复:https://sunpma.com/674.html
      三十七:修复搜索框按钮

  9. Ganhua

    请问什么情况下回出现Create error,我一直都是出现的这个要崩了。

    1. sunpma
      @Ganhua

      这个没办法帮你判断~~

  10. 哈辛达

    博主优秀,但是静态首页后,无法首页登录账户怎么办,或者其他页面登录后,回到首页刷新会自动注销登录

    1. sunpma
      @哈辛达

      我自己使用并没有注销登录的问题,你看看是不是哪里设置有问题~~

      1. 哈辛达
        @sunpma

        博主可以告知 你这个头像的布局是怎么设置的吗?handsome 默认是头像左边,描述右边,你这个是头像上面 描述在下面比较好看

        1. sunpma
          @哈辛达

          这是版本不一样,我用的5.3.1版,6.0版后就改成在右边了~~

          1. 哈辛达
            @sunpma

            哎哟我去 那么尴尬的吗

      2. 哈辛达
        @sunpma

        感谢,问题解决了

  11. Glan

    这个教程真的简单暴力,改了下,效果显著,只有首页可以纯静态,也是非常好的。
    之前在loc看到博主的blog的,果断收藏~

    1. sunpma
      @Glan

      感谢收藏

  12. okfree

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

  13. moer

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

  14. 小优

    博主,为什么我生成的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

            好,我去试试,感谢!

  15. yanx1n

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

    1. sunpma
      @yanx1n

      QQ基本不用了,TG:@XXXXXX

  16. 公益图床

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

    1. sunpma
      @公益图床

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

      1. 公益图床
        @sunpma

        路径是对的

  17. tnjc

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

    1. sunpma
      @tnjc

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

      1. tnjc
        @sunpma

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

        1. sunpma
          @tnjc

          OK~

  18. tnjc

    是不是少加了什么

  19. tnjc

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

    1. sunpma
      @tnjc

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

      1. tnjc
        @sunpma

        只是为了方便测试设置两秒,默认等了二十多分钟也没更新,这样更新文章也显示不了

        1. sunpma
          @tnjc

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

      2. tnjc
        @sunpma

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

        1. sunpma
          @tnjc

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

          1. tnjc
      3. tnjc
        @sunpma

        if($pastsec

  20. tnjc

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

    1. sunpma
      @tnjc

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