网站升级手记
起因
之前本站的访问计数器是引用一个外部的web服务器控件(是一个基于ASP的服务),但是可能由于各种原因吧,总之,这个小东西严重影响了网站页面的打开速度。而且就这个东西的功能而言根本不需要这种消耗的(估计这种速度的损失是由于连接控件所在服务器本身的过程造成的)。所以有了第一次想把网站改成动态站点的念头,从而自己实现这些小功能。
另外,现在对动态网站的说法铺天盖地,无论如何,大势所趋也好,人云亦云也罢,也免去了我回答(是啊,不止一次了)为什么不做动态网站的问题(其实倒不如说为什么扩展名是htm?而不是asp,jsp之类的)。尽管除了一个计数器。我还真没打算做什么动态的东西。
计划
在技术的选择上,我几乎是别无选择的。我购买的空间只是支持ASP的动态页面,尽管我对ASP并不怎么熟悉。但它上手很简单。三天下来,写一个访问计数器已经完全不是问题了,
至于数据的保存,没什么安全的需求,也完全没必要数据库的东西。一个文本文件足以对付了。
过程
由于所有的页面都是手写的,我很清楚什么页面有什么,所以第一步就是先把所有的htm文件的扩展名改成asp(恩,这下大家满意了吧?hoho!!)。第二步,在网站的根目录下增加一个global.asa,处理全局事务,内容主要如下:
<script language="vbscript" runat="server">
sub Application_OnStart
dim FileObj
set ioObj = Server.CreateObject("Scripting.FileSystemObject")
Application("visitcountfile") = Server.MapPath("data/Count.txt")
if ioObj.FileExists(Application("visitcountfile")) then
set FileObj = ioObj.OpenTextFile(Application("visitcountfile"))
Application.Contents.Item("visitcount") = FileObj.ReadAll
else
set FileObj = ioObj.CreateTextFile(Application("visitcountfile"),True)
FileObj.Write(100)
FileObj.Close
set FileObj = ioObj.OpenTextFile(Application("visitcountfile"))
Application.Contents.Item("visitcount") = FileObj.ReadAll
end if
FileObj.Close
end sub
sub Application_OnEnd
set ioObj = Server.CreateObject("Scripting.FileSystemObject")
set FileObj = ioObj.CreateTextFile(Application("visitcountfile"), True)
FileObj.Write(Application.Contents.Item("visitcount"))
FileObj.Close
end sub
</script>
第三步,在index.asp文件的head标志之间加入如下代码:
<%
Application.Lock
t = Application("visitcount")
Application("visitcount") = t + 1
Application.UnLock
%>
第四步,在需要显示数据的地方访问Application("visitcount")变量,很多人攻击asp页面的浏览器兼容问题,其实,动态页面更多的是服务器端的东西,只要服务器支持asp服务,你在客户端具体用什么浏览器其实关系是不大的,而浏览器兼容问题往往是css和javascript的某些特性引起的,因此只要处理好这步。一般情况下是不会出现什么浏览器问题的。
测试
为了证实,我刚才说的内容,我在自己的IIS上分别用IE,firefox,opera来访问页面,这三种浏览器的市场占有率大概已经在99.9%,应该可以说明这个服务是可用的。下图是opera访问本站的情况:
下图是firefox访问情况: