网上大部分的文章都介绍的是用fopen或者file_get_contents函数生成html静态,这种生存方式比较简单,但是缺点也比较多,比如上次我的美食网站通过这种方法生成大约50万数据的时候,居然用了15天时间,服务器CPU一直超高不下,这样的效率实在让人无法忍受,所以我不断的在查询资料终于查找到了比较优秀的静态生成方式,最终选择discuz的JS方法。
首先,我们先来看一下file_get_contents函数生成的原理是:
$content=file_get_contents('获取需要生成内容地址,');
$url='type/id.html';
file_put_contents($url,$content);
当然,这是最简单的代码了,更复杂一点效率会高一点,的代码:
ob_start();
echo "Hello World!";
$content = ob_get_contents();//取得php页面输出的全部内容
$fp = fopen("type/id.html", "w");
fwrite($fp, $content);
fclose($fp);
但是如果要批量生产的话就比较费力了。
所以说要想让PHP快速生成html必须从系统内部进行支持,所以我对整个系统的构架进行了更改,当用户访问动态页的时候,在判断后台开关是否开启了html生成,如果有,用户访问,第一次是动态页,当第二个用户访问的时候就会变成静态页,并301过去。通过这种机制,我们就可以改善html的生成速度。我们可以借助jQuery的$.GET方法实现快速生成html,如果需要强制执行,可以在页面上设置一个开关如的参数里增加一个gethtml=1之类的,就算已经生成了静态页,也会强制再次生成一遍,这有助于网站的更新,通过这种方式我们就可以判断页面的生成时间,设置后台更新时间达到页面自动更新。
jQuery得写法如下:
$(function() {
var catJson = $urljosn;
for (var i in catJson) {
$.get(catJson[i], function(data, status) {
var info = status == 'success' ? '成功生成' : '生成HTML失败';
$("#urlshow").append('' + this.name + ' ' + info + '');
});
} /*setTimeout("$(location).attr('href','$gourl')", 1000);*/
$(location).attr('href', '$gourl');
});
需要PHP把需要生成的网址,数组转换为json格式:$urljosn = json_encode($urlarr);而且可以定义每页生成多少,然后限制生成哪一个分类等信息。
最后,我们可以通过iframe的方式在发布文章时或者编辑文章时自动生成html或更新。
<iframe width="0" height="0" scrolling="no" src="你的PHP地址?id=' . $id . '&gethtml=1"></iframe>
除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:https://www.55mx.com/post/8
《PHP生成静态HTML效率更高的方式》的网友评论(0)