在使用Dedecms的过程中,当网站内容逐渐增多,生成HTML的速度可能会变得非常缓慢。尤其是在文章数量超过10万甚至上百万时,生成过程会变得异常痛苦。
为了解决这一问题,我们可以通过修改代码和优化生成策略来显著提升生成速度。
找到文件:include/inc/inc_fun_SpGetArcList.php
将以下代码注释掉:
for($i=0;$i<$ridnum;$i++){
if($tpsql=="") $tpsql .= " And ( (".TypeGetSunID($reids[$i],$dsql,'arc')." Or arc.typeid2='".$reids[$i]."' ) ";
else $tpsql .= " Or (".TypeGetSunID($reids[$i],$dsql,'arc')." Or arc.typeid2='".$reids[$i]."' ) ";
}
替换为:
for($i=0;$i<$ridnum;$i++){
if($tpsql=="") $tpsql .= " And ".TypeGetSunID($reids[$i],$dsql,'arc');
else $tpsql .= " Or ".TypeGetSunID($reids[$i],$dsql,'arc');
}
通过以上修改,可以极大提高运行速度,因为副栏目不再参与查询。
对于Dedecms 5.1版本,同样需要修改inc_fun_SpGetArcList.php文件。
查找以下代码:
$orwhere .= " And ( arc.typeid in ($sonids) Or arc.typeid2 in ($sonids) ) ";
将其替换为:
$orwhere .= " And arc.typeid in ($sonids) ";
接下来是具体的优化步骤:
1、关闭副栏目功能,生成速度可以从50秒20页降至20秒20页。
2、删除文档模板中带有sort=rand的arclist标签,并开启后台所有缓存,生成速度从20秒20页降至6秒一页。
3、删除文档模板中的相关文档调用,生成速度从6秒降至不到一秒。
通过上述方法,可以让Dedecms生成HTML的速度提升一倍以上。当文章数量庞大时,这种方法显得尤为重要。
此外,还可以采用公共数据只生成一份并用include方式包含的方法。例如,10个分类每个100页,左右侧公共数据相同的情况下,若每次都从数据库读取并显示,会增加复杂度和服务器负载。如果仅生成一个HTML文件供其他页面包含,则可减少服务器压力,加快生成速度。
考虑到Dedecms列表和文章页面存在大量重复数据,推荐使用shtml方式处理动态排行和推荐部分,而文章详细页面内容基本不变的部分则保持静态化。
在生成HTML时,可以将公共数据如头部、底部等生成为shtml文件,在生成列表或文章详细页面时直接include这些文件。这样不仅减少了服务器生成时间,还提高了生成效率。
遇到改版或调整广告等情况时,只需重新生成独立数据部分,不影响整体大数据状态,实现局部更新。
通过节约公共数据处理时间,我们可以获得更高效的生成体验。接下来将进一步探讨如何生成Dedecms导航、底部及其他公共数据部分的shtml文件。