页面静态化工作笔记,简单记录实现思路以备用:
用户输入一个页面路径,程序自动匹配页面中的用户控件,然后将页面中的用户控件生成html文件,同时写入更新文件的js脚本,最后将原文件引用用户控件处改写为引用html页,例如某页中含有如下代码
<%@ Register Src="controls/UC_Bottom.ascx" TagName="UC_Bottom" TagPrefix="uc2" propColuID="633434214587656250" %>
<%@ Register Src="controls/UC_Top.ascx" TagName="UC_Top" TagPrefix="uc1"
propColuID="633434214587656251" %>
<uc1:UC_Top ID="UC_Top1" runat="server" />
<uc2:UC_Bottom ID="UC_Bottom1" runat="server" />
静态化操作后代码变为:
<!--#include file=" /schBlog/MyWeb/fortuneage/pub/htmlAscxs/uc_top1_6334627118720250.html"-->
<!--#include file=" /schBlog/MyWeb/fortuneage/pub/htmlAscxs/uc_bottom1_6334627118626.html"-->
操作主界面如下
点查看控件列表后会匹配出这个页面中所有的用户控件

在些页面中选择要静态化的控件,点操作,便完成替换处理。
替换时,控件信息和页面信息同时入库,当数据库中已有某控件信息且参数信息也一致(如propColuID="633434214587656250"),替换时此控件不再生成HTML页,而是引用原有的HTML页。到此,第一次静态化处理已完毕。当浏览处理后的页面时,触发HTML页用来更新的JS脚本,如:var date = new Date("2008","5","12","10","2","48"); funcUpdate(date,"20","633459418283906250");,这段代码是在生成html页时写入的。Date表示生成HTML页的时候,20表示更新周期,633459418283906250表示控件ID,funcUpdate函数中判断更新条件,如果符合则以异步的方式post到后台更新html文件。考虑多用户并发时网络质量的差异,在后台中再一次判断更新条件,如果符合则写文件并加锁挂起,此处使用双加锁的模式,当线程获得文件使用权时,再一次判断更新条件,以防止刚更新过的文件再一次更新,造成资料浪费。
利用此方法对页面静态处理后,各新生成的用户控件对应的HTML页都是统一的更新周期和字符编码,因引另提供了一个页面管理控件,以将操作粒度定位到每一个控件。页面部分如下:
到此所用操作是由程序员完成,如果用户希望自己更新静态页,则使用如下页面:
