现今的网络技术的发展目标之一就是要达到窗体和功能性的分离
。六七年之前,这并不是一件难事,浏览器会提交一个浏览网页的请求信息,服务器发出需要的网页后,通过浏览器对其进行解析,选取需要的图像文件,这之后,HTML格式的代码就变成了版面形式或网页内容。现在,几乎所有的网页都有一些功能性的行为包含在里面。
在网络从提供静态的内容到成为一个交互式的应用平台的演变过程中,直到我们有了意大利面条式代码之前,窗体和功能性一直被混合在一起。类似于Java Server Page (JSP)和ASP.NET这样的技术可以消除这种混合,但是一个ASP开发者要使网页实现更高的合成化并可以重复使用,还需要做很多工作。
在纪录中,当窗体和功能性注定要在对象(由于没有更恰当的词汇,我们姑且称其为对象)中结合在一起时,将二者混合起来就并不是一件坏事,而且还要尽可能的依赖于以编译的代码。如果在一个网页中存在并不依赖于其内部对象的一些功能时,将他们放置在一个动态连接库(DLL)之中并通过DLL而不是脚本来调用这些功能。如果你在Microsoft Transaction Server或Component Services中建立这个DLL时,确保Retain In Memory这个选项已经设置,这可以保证对象在需要时可以很快地被调用。
如果你在服务器端使用IIS 5,你就要考虑将include指令()用Server.Execute方法代替。这个方法的性能也许并不如include指令,但是当代码路径没有被执行时他可以避免再次加载网页。要指出的是,include指令首先通过Ssinc.dll ISAPI filter进行处理,而且只有在通过处理所有的include指令而得到一个复合型网页之后,这个网页才会被提交到ASP引擎进行脚本指令处理。而Server.Execute也可以达到同样的效果,他可以在代码指令行没有被执行时,避免出现二次调用网页的现象。