biaosoft - 2008-7-13 22:45:00
foosun 免费版 4.0sp5 生成静态页的速度太慢了,那能否改进呢?
看下以下几段JS代码. 系统使用了 ajax 来刷新生成页面.这个过程,网络响应就要减少速度.
关于这个,搜索一下,有位朋友已经做个插件出来改进了.
我这里就再来说下.
function Start_Refresh(url,Action){
var myAjax = new Ajax.Request(
url,
{method:'get',
parameters:Action,
onComplete:Refresh_Receive
}
);
}
function Refresh_Receive(OriginalRequest){
var check,goback;
var percent=0;
//goback="<a href=\"返回\" onclick=\"location.reload();return false;\">返回</a>";
goback="<a href=\"返回\" onclick=\"$('RefreshMain').style.display='';$('RefreshSchedule').style.display='none';return false;\">返回</a>";
if (OriginalRequest.responseText.indexOf("$")>-1){
check=OriginalRequest.responseText.split("$");
switch (check[0]) {
case "MF" :
$("RefreshLen").style.width ="100%";
$("RefreshLen").innerHTML=" <span class=\"xingmu\">100%</span>";
$('result_str').innerHTML="首页发布结束 <a href=\"http:\/\/<%= Request.Cookies("FoosunMFCookies")("FoosunMFDomain")&"\/"&Request.Cookies("FoosunMFCookies")("FoosunMFIndexFileName") %>\" target=\"_blank\">浏览首页<\/a> "+goback;
countnum=1;
break;
case "Next" :
percent=(parseInt(check[2])/parseInt(check[1]))*100;
percent=Math.round(percent);
$("RefreshLen").style.width =percent+"%";
$("RefreshLen").innerHTML=" <span class=\"xingmu\">"+percent+"%</span>";
$('result_str').innerHTML="总共要发布" + check[1] + "条内容,已经发布" + check[2] + "条内容...";
//Start_Refresh("PublicSite/Public_Refresh.asp","");
'看下面这几句,什么意思呢? countnum 是当前成功生成数量, G_REFRESH_NUM_TIME 应该是设置的设新频率.
'然后,再次提交,服器又再生成页面.
'其实觉得很奇怪,为什么要这样刷新呢?为什么不直接在服务器生成10个或者更多的页面呢?
'这绝对影响了生成速度.
if ((countnum % G_REFRESH_NUM_TIME)==0){
window.setTimeout("Start_Refresh(\"PublicSite/Public_Refresh.asp\",\"\")",1000);
}else{
Start_Refresh("PublicSite/Public_Refresh.asp","");
}
countnum++;
break;
case "End" :
$("RefreshLen").style.width ="100%";
$("RefreshLen").innerHTML=" <span class=\"xingmu\">100%</span>";
$('result_str').innerHTML="总共要发布" + check[1] + "条内容,已经发布" + (check[2]-1) + "条内容...";
$('result_str').innerHTML=$('result_str').innerHTML+"<br />发布结束 "+goback;
countnum=1;
break;
case "No" :
$('result_str').innerHTML="没有要发布的内容 "+goback;
countnum=1;
break;
default :
//alert(OriginalRequest.responseText);
//$('result_str').innerHTML=OriginalRequest.responseText;
//Start_Refresh("PublicSite/Public_Refresh.asp","");
$('result_str').innerHTML="发布失败,请与管理员联系。 "+goback+"<br>错误描述如下:ID:<span class=\"tx\">"+check[1]+"</span>,<span class=\"tx\">"+check[2]+"</span>";
//Start_Refresh("PublicSite/Public_Refresh.asp","");
}
}
else{
$('result_str').innerHTML="发布失败,请与管理员联系。 "+goback+"<br>错误描述如下:"+OriginalRequest.responseText;
}
}
'还未看清楚,等下再发表如何改进
wjcreator - 2008-7-13 22:56:00
不错,支持一下
yato - 2008-7-13 23:45:00
支持一下,这个问题确实需要改进,否则会让XXX丝们溜走的
biaosoft - 2008-7-14 01:13:00
哈哈,终于修改成功了!
快了N多!
cyxjq - 2008-7-14 10:07:00
恩不错!
biaosoft - 2008-7-14 11:21:00
在Public_Refresh.asp文件中,修改了以下一些代码
注意一些类似
SESSION("COOKIES_REFRESH_FirstID")
这样的cookies变量,被我换成了 session
这个主要功能就是,超过8页以上的内容,分为4次刷新.这样,因网络延时所造成的生成速度慢的问题,可以解决.
但生成慢的问题,仍然没有彻底解决.因为foosun生成的过程中,太多次重复调用了.但仍有修改空间,不过太复杂,修改起来要花点时间.
Dim RefreshWaitCount
p_Sql = Get_Sql
f_Action=""
if P_Count<=8 then '小于8页,不设置刷新,直接完成
RefreshWaitCount=1
else
RefreshWaitCount=(P_Count-P_Count mod 8)*2/8 '总数分1/4刷新
end if
do while (RefreshWaitCount>0)
if p_Sql <> "" then
p_Refresh_OK_TF = Refresh_One_Record(p_Sql,True)
If p_Refresh_OK_TF=True then
If Err Then
Response.Write "Err$"&SESSION("COOKIES_REFRESH_FirstID")&"$"&Err.Description
Response.End()
Else
if RefreshWaitCount < 2 or p_Index=0 then
Response.Write "Next$"&P_Count&"$"&p_Index+1
Exit do
end if
End If
ElseIf p_Refresh_OK_TF=False then
If Err Then
Response.Write "Err$"&SESSION("COOKIES_REFRESH_FirstID")&"$"&Err.Description
Response.End()
Else
Response.Write "End$"&P_Count&"$"&p_Index+1
exit do
End If
Else
Response.Write "Err$"&SESSION("COOKIES_REFRESH_FirstID")&"$"&Err.Description
exit do
End If
else
If Err Then
Response.Write "Err$"&p_Index&"$"&Err.Description
Response.End()
Else
Response.Write "No$$"
exit do
End If
end if
p_Sql = Get_Sql
RefreshWaitCount=RefreshWaitCount-1
loop
biaosoft - 2008-7-14 11:27:00
修改原理就是:
减少刷新次数,不需要重复的由用户响应之后才开始下一页的生成工作.这种如果网速慢的话,这样修改的话,效果非常明显.但是因为服务器一般被限制了CPU占用,所以这样修改方法,也不能达到很好的效果.而且可能还会导致你的网站CPU占用被占尽,而无法访问的情况.
我想修改,但是未完成的,是对foosun主生成函数的修改:这是治本的方法
原理是这样的: 因为 foosun 在多次使用了 for next 等语句
例如:
for i=0 to 1000
for j= 1 to 100
nex t
next
如上,如果能减少, 最内层 for j 的次数,或减少代码,就可以极大的提高速度.既然我们在服务器连续执行数页的生成工作,那么一些重复的代码就没有必要,比如,我们可以把整个标签库缓存到变量,,而无需每次都去读数据库.
bizcom - 2008-7-27 15:04:00
希望风讯官方能有所改进
binge - 2008-7-31 21:26:00
能不能把改过以后的代码贴出来呀
haohao110 - 2008-7-31 22:03:00
希望楼主能够共享修改后的代码!在这我带大伙谢谢你了
8ewzcn - 2008-8-1 01:25:00
支持
jxspace - 2008-8-1 09:03:00
感谢大家的建议,这点已经提交给官方的相关工作人员,他们会参考这些建议的,欢迎大家继续使用.
sicend - 2008-8-2 09:56:00
这个确实是个问题,希望官方进一步修正。