怎样创建鲁棒性、正确性、可维护性和性能俱佳的ASP应用程序?要做什么?不做什么?本文以提纲的形式,给出了主要的Check-Points(检查点)。 
     什么是ASP    
  Active Server Page,简称ASP,是:    
  . 连接网友界面(HTML)和商业逻辑(Business Logic); 
  . 提供一致的、容易使用的、有状态保持的、基于Web的客户端; 
  . 为那些需要事务处理的WEB 应用提供应用程序环境。    
  ASP不是:    
  . 实现商业逻辑(Business Logic)的地方;商业逻辑应该通过COM+、MTS或者数据库来实现。    
  ASP的使用者应该有下面的教训:    
  . 开发应用程序,而不是开发一个一个的孤立ASP页面; 
  . 对输入和输出进行缓存; 
  . 在发布之前要测试; 
  . 选择性能较好的部件; 
  . 减少数据库的存取:缓存变换后的结果; 
  . 使用MSMQ来处理有时间延迟的工作;    
  站点设计    
  . 你的站点想提供什么? 
  . 信息架构:80/20准则; 
  . 站点导航; 
  . 页面布局; 
  . 可用性; 
  . 使用ALT和Title属性; 
  . 不使用图片或者Image Map的导航; 
  . 适合大多数低版本浏览器,考虑他们对ActiveX、RDS、XML、DHTML、Java Applet的支持状况; 
  . 屏幕分辨率和屏幕颜色数 
  . 是否支持WebTV、PDA…? 
  . 设置IMG的width和height属性。 
  . 非浏览器的访问,如自动机器人(Spider); 
  . 使用帧(Frame)? 
  . 使用Cookies的个性化; 
  . 避免坏连接; 
  . 使用meta标签; 
  . 内容审核; 
  . 内容检索; 
  . 结果反馈:用户反馈和跟踪; 
  . 减少下载时间;    
  三层、四层应用设计    
  可读性、可维护性    
  . 使用注释; 
  . 在VBScript脚本中使用<%Optio. Explicit%>; 
  . 使用字符串变量存储SQL字符串:便于调试; 
  . 使用Server.MapPath和相对路径; 
  . 使用ADODB.INC或者<!—metadata typelib=somelib file=somedll-->来引用常量,不要直接使用常量数值。 
  . 指定ADO调用的缺省参数,避免出错; 
  . 使用库或者部件来封装代码。    
  正确的方法:    
  . 使用Server.URLEncode 
  . 错误捕获和处理    
  国际化:    
  . 使用<%CodePage%> 
  . 使用Session.CodePage 
  . 在IIS5.0中,Response.write支持UTF8    
  其他:    
  . 使用#include 重用代码 
  . 使用分页技术    
  站点安全:    
  . 客户身份验证 
  . 输入验证 
  . #include 文件不要使用.INC后缀,使用.ASP或者设置.INC的应用程序映射 
  . 把MDB文件存放在非WEB路径下; 
  . 使用ADSI做安全管理    
  Session和Application状态    
  Session的使用:    
  . 使用起来很方便但是很有问题; 
  . HTTP是一个无状态的协议; 
  . 设计购物推车特别有用; 
  . 不利于可伸缩性设计(Scalability); 
  . 在不需要Session的页面中使用<%EnableSessionState=false%> 
  . 尽可能完全避免使用Session; 
  . 在多个web服务器情况下不适合; 
  . 某些部件使Session运行在单一线程模式,减少了吞吐量; 
  . 消耗内存; 
  . Session有超时的问题 
  . 需要客户端的浏览器打开cookie设置; 
  . 不要在session中保存recordset,或者缓存connection对象; 
  . 在global.asa不要使用空的Session_OnEnd; 
  . 可选方案: 
  . cookies 
  . 直接状态编码:简单、容易、不安全 
  . 后端数据库的ID作为状态值 
  . querystring 参数 
  . 如amazon的url方式 
  . 隐藏的表单    
  Application变量:    
  . 共享变量 
  . 不能持久保存 
  . 多个web服务器时不行,除非只是只读变量。    
  缓存    
  . 对静态内容非常理想 
  . 不要使用Response.Expires=0,使用负数: 
  . Response.Expires=-10000; 
  . Response.AddHeader “Pragma”,”no-cache” 
  . Response.AddHeader “cache-control”,”no-store” 
  . 服务器缓存 
 &n