中国江西 發表於 2023-6-7 00:00:00

Z-Blog 留言评论显示IP地址和性能优化

<p>
经过对Z-Blog的代码进行分析,我发现其原因是大并发用户同时写数据库产生的原因。 <br>
我这里想到了一个针对这个问题的解决方案,就是时间缓存,定时写数据库,在一定时间内,数据只写入内存,不写入数据库,当缓存时间到了以后,再把内存的数据写入数据库。这样,即使再大的并发量,也不会再发生数据库死锁的问题了。 <br>
经过初步的代码修改和测试,发现修改完了以后就没有这个问题了。 <br>
修改方法是,打开FUNCTION目录下的c_html_js.asp文件,修改UpdateCountInfo函数为以下代码即可。 <br>
 </p>
<div>

<p>
代码如下:</p>
</div>
<div id="phpcode4">
<br>
Function UpdateCountInfo(id) <br>
Dim strLastUpdate <br>
Dim intArticleCount <br>
Dim aryArticleCount <br>
Dim objRS <br>
Application.Lock <br>
strLastUpdate=Application(ZC_BLOG_CLSID&amp;"LAST_UPDATE") <br>
aryArticleCount=Application(ZC_BLOG_CLSID&amp;"CACHE_ARTICLE_VIEWCOUNT") <br>
aryArticleCount(id)=aryArticleCount(id)+1 <br>
Application(ZC_BLOG_CLSID&amp;"CACHE_ARTICLE_VIEWCOUNT")=aryArticleCount <br>
Application.UnLock <br>
If IsEmpty(strLastUpdate) Or Not IsDate(strLastUpdate) Then <br>
Application.Lock <br>
Application(ZC_BLOG_CLSID&amp;"LAST_UPDATE") = Now() <br>
strLastUpdate = Application(ZC_BLOG_CLSID&amp;"LAST_UPDATE") <br>
Application.UnLock <br>
End If <br>
If DateDiff("s",strLastUpdate,Now()) &gt; 30 Then <br>
'如果当前时间与上次保存计数值的时间差大于设定的时间间隔,则把计数值重新写入数据库 <br>
Call OpenConnect() <br>
Set objRS=objConn.Execute("SELECT , FROM WHERE =" &amp; id) <br>
If (not objRS.bof) And (not objRS.eof) Then <br>
intArticleCount=objRS("log_ViewNums") <br>
Else <br>
intArticleCount=0 <br>
End If <br>
objRS.Close <br>
Set objRS=Nothing <br>
If aryArticleCount(id) &gt; intArticleCount Then <br>
objConn.Execute("UPDATE SET =" &amp; CStr(aryArticleCount(id)) &amp; " WHERE =" &amp; id) <br>
Application.Lock <br>
Application(ZC_BLOG_CLSID&amp;"LAST_UPDATE") = Now() <br>
Application.UnLock <br>
Else <br>
aryArticleCount(id) = intArticleCount <br>
Application.Lock <br>
Application(ZC_BLOG_CLSID&amp;"CACHE_ARTICLE_VIEWCOUNT")=aryArticleCount <br>
Application.UnLock <br>
End If <br>
Call CloseConnect() <br>
End If <br>
End Function </div>
<p>
<br><span>另外,默认的Z-Blog留言评论是没有用户IP地址显示的,通过一些修改,可以在留言中增加用户IP地址前三位的显示功能,具体实现方法如下。 </span><br><span>修改c_system_lib.asp文件的Public Function MakeTemplate(strC)函数,加入下面语句: </span></p>
<div>

<p>
代码如下:</p>
</div>
<div id="phpcode5">
<br>
ReDim aryTemplateTagsName(12) <br>
ReDim aryTemplateTagsValue(12) <br>
aryTemplateTagsName( 12)="article/comment/ip" <br>
if AuthorID=1 then <br>
aryTemplateTagsValue(12)="" <br>
else <br>
aryTemplateTagsValue(12)="ip:" + Left(IP, InStrRev(IP, ".")) + "*" <br>
end if <br>
  修改TArticle的Function Export_CMTandTB()函数,将 objComment.LoadInfoByArray(Array(objRS("comm_ID"),objRS("log_ID"),objRS("comm_AuthorID"),objRS("comm_Author"),objRS("comm_Content"),objRS("comm_Email"),objRS("comm_HomePage"),objRS("comm_PostTime"),"","")) 改为 objComment.LoadInfoByArray(Array(objRS("comm_ID"),objRS("log_ID"),objRS("comm_AuthorID"),objRS("comm_Author"),objRS("comm_Content"),objRS("comm_Email"),objRS("comm_HomePage"),objRS("comm_PostTime"),objRS("comm_IP"),"")) <br>
  修改 b_article_comment.html ,增加 &lt;#article/comment/ip#&gt;标签。 </div>
<p>
<br><span>之后,文章评论就会出现评论者的IP地址栏,不过有个问题是,当评论有人回复的是时候,只能留下最后一个回复者的IP地址。(原文)</span></p>
頁: [1]
查看完整版本: Z-Blog 留言评论显示IP地址和性能优化