最近,某客户网站生成静态文件超慢。2.7万用了一天也没生成完。很是郁闷。
查阅模板文件,发现蹊跷:
<DL>
<DT>相关文章</DT>
<DD>
<ul>
{dede:arclist titlelen='42' row='5' orderby=rand}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
</DD>
</DL>
该模板文件用了dede标签的rand随机。
只能从修改该标签着手了。
解决方案:
采用新的标签代码:
{dede:field name='id' function='GetRand(42,5)'/}
在 include\inc_functions.php 增加一个新函数:
function GetRand($t,$s)
{
$dsql = new DedeSql(false);
$row = $dsql->GetOne("select id From #@__archives order by id desc limit 0,1");
$r = $row['id'];
$q=mt_rand(1, $r);
for($i=1;$i<$s;$i++)
{
$q =$q.",". mt_rand(1, $r);
}
$query = "Select ID,title,typeid,ismake,senddate,arcrank,money From #@__archives where ID in (".$q.") ";
$dsql->SetQuery($query);
$dsql->Execute();
$q = "";
while($row = $dsql->GetObject()){
$naid = $row->ID;
$ntitle = $row->title;
$typeid = $row->typeid;
$nRow = $dsql->GetOne("select ID,typedir,typename,namerule,namerule2,ispart,moresite,siteurl From #@__arctype WHERE ID=".$typeid);
$nlink = GetFileUrl($naid,$typeid,$row->senddate,$row->title,$row->ismake,$row->arcrank,$nRow['namerule'],$nRow['typedir'],$row->money,true,$nRow['siteurl']);
$q .= '<li><a href="'.$nlink.'" target="_blank" class="tag_title_link">'.cn_substr($ntitle,$t).'</a></li>';
}
$dsql->Close();
return $q;
}
经过实测,生成速度那叫一个快。
请注意dede版本,适用于 dedecms 4.0.1
哈哈。