在zblog网站留言评论显示IP地址以及性能优化

经过对zblog的代码加以分析,我发觉其缘由是大量并发用户同时对数据库进行写入操作所导致的。

在此,我想到了一个针对该问题的解决办法,那便是采用时间缓存的方式,定时去写数据库。即在特定时间段内,数据仅写入内存,而不写入数据库,等到缓存时间一到,再将内存中的数据写入数据库。如此一来,即便并发量再大,也不会再出现数据库死锁的问题了。

经过初步的代码修改与测试,发现完成修改之后,这个问题就不复存在了。
修改的具体方法是,打开FUNCTION目录下的c_html_js.asp文件,将UpdateCountInfo函数修改为如下代码便可。

 
Function UpdateCountInfo(id) 
Dim strLastUpdate 
Dim intArticleCount 
Dim aryArticleCount 
Dim objRS 
Application.Lock 
strLastUpdate=Application(ZC_BLOG_CLSID&"LAST_UPDATE") 
aryArticleCount=Application(ZC_BLOG_CLSID&"CACHE_ARTICLE_VIEWCOUNT") 
aryArticleCount(id)=aryArticleCount(id)+1 
Application(ZC_BLOG_CLSID&"CACHE_ARTICLE_VIEWCOUNT")=aryArticleCount 
Application.UnLock 
If IsEmpty(strLastUpdate) Or Not IsDate(strLastUpdate) Then 
Application.Lock 
Application(ZC_BLOG_CLSID&"LAST_UPDATE") = Now() 
strLastUpdate = Application(ZC_BLOG_CLSID&"LAST_UPDATE") 
Application.UnLock 
End If 
If DateDiff("s",strLastUpdate,Now()) > 30 Then 
'如果当前时间与上次保存计数值的时间差大于设定的时间间隔,则把计数值重新写入数据库 
Call OpenConnect() 
Set objRS=objConn.Execute("SELECT [log_ID],[log_ViewNums] FROM [blog_Article] WHERE [log_ID] =" & id) 
If (not objRS.bof) And (not objRS.eof) Then 
intArticleCount=objRS("log_ViewNums") 
Else 
intArticleCount=0 
End If 
objRS.Close 
Set objRS=Nothing 
If aryArticleCount(id) > intArticleCount Then 
objConn.Execute("UPDATE [blog_Article] SET [log_ViewNums]=" & CStr(aryArticleCount(id)) & " WHERE [log_ID] =" & id) 
Application.Lock 
Application(ZC_BLOG_CLSID&"LAST_UPDATE") = Now() 
Application.UnLock 
Else 
aryArticleCount(id) = intArticleCount 
Application.Lock 
Application(ZC_BLOG_CLSID&"CACHE_ARTICLE_VIEWCOUNT")=aryArticleCount 
Application.UnLock 
End If 
Call CloseConnect() 
End If 
End Function

另外,Z – Blog 系统默认的留言评论并不会显示用户 IP 地址。经过一些特定的修改操作后,能够实现在留言中增添用户 IP 地址前三位的显示功能,其具体的实现方法如下:
对 c_system_lib.asp 文件中的 Public Function MakeTemplate(strC)函数进行修改,在其中添加下面的语句:

ReDim aryTemplateTagsName(12) 
ReDim aryTemplateTagsValue(12) 
aryTemplateTagsName( 12)="article/comment/ip" 
if AuthorID=1 then 
aryTemplateTagsValue(12)="" 
else 
aryTemplateTagsValue(12)="ip:" + Left(IP, InStrRev(IP, ".")) + "*" 
end if 
  修改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"),"")) 
  修改 b_article_comment.html ,增加 <#article/comment/ip#>标签。

完成上述修改之后,文章评论区域就会出现评论者的 IP 地址栏。不过需要注意的是,当评论存在回复情况时,该区域只会留存最后一个回复者的 IP 地址。

@版权声明:

本网站所展示的图片均来源于互联网,我们致力于尊重原创作者的版权。若图片涉及版权问题,或图片所有者不希望图片被展示,请与我们联系,我们将在第一时间进行处理,包括但不限于删除图片。我们对图片的版权问题持开放态度,并愿意与版权所有者进行沟通协商。感谢您的理解与支持。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索