电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> Asp>>如何写出优秀的ASP应用:

如何写出优秀的ASP应用

来源:网络 | 2007-2-3 | (有1727人读过)

怎样创建鲁棒性、正确性、可维护性和性能俱佳的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” 
. 服务器缓存 
. proxy缓存 
. 客户端缓存 

部件 

. 性能 
. 伸缩性 
. 分离商务逻辑和页面表现 
. 被ASP或其他环境重用 
. 事务处理 
. 类型安全 
. 存取操作系统特性 
. 保护知识产权 
. 在下列情况下使用Server.CreateObject: 
. MTS事务处理 
. 上下文安全性 
. ASP内部部件 
. OnStartPage、OnEndPage 
. 使用<Object RunAt=server>延迟对象初始化 
. 是否保存到Session或者Application变量中 

性能 

. Response缓冲:Response.Buffer=True 
. 关闭Connection并:set Connection=Nothing 
. 使用局部变量 
. 用<Object >代替Server.CreateObject 
. 不要使用Session和Application变量 
. 不要将COM对象存储在Session或者Application变量中 
. 关闭脚本调试 
. 避免重复的字符串相加 
. 在费时的页面顶端使用Response.IsClientConnected 
. 使用MSMQ 
. 不要在Session或者Application中存储大数组 
. 不要ReDim 数组 
. 将集合类型的对象赋给临时变量 
. 减小微处理器的最大线程数(运行regedt32,在HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\w3SVC\ASP\Parameters,增加ProcessorThreadMax,减小这个值,看看性能的变化;或者增大这个值。) 
. 设置AspScriptEngineCacheMax,使它等于ProcessorThreadMax*CPU个数。缺省的是30;(在系统路径下:\system32\inetsrv/adminisamples下,键入adsutil.vbs,设置/w3svc/AspScriptEngineCacheMax); 
. 减少Session.Timeout; 
. 在MMC中,设置ASP应用程序缓冲为有效。 

把某些工作交给客户端: 

. CSS、DHTML 
. XML 
. RDS 
. Remote Scripting 
. Xmlhttp 
. 客户端验证 
. 减小文件大小 
. 尽可能避免https和SSL 
. 使用Response.End测试性能 

数据库 

. 减少数据库存取访问; 
. 缓存变换后的结果; 
. 使用ODBC连接池和OLEDB资源池; 
. 使用系统DSN或者非DSN,不要使用DSN或者文件DSN; 
. 使ADO运行在双线程模式(Both-threaded):makefre.bat; 
. 使用ADO的Field对象; 
. GetString或者GetRows比较快; 
. RDS和XML把负载嫁到客户端; 
. 不要使用Select *,把字段写出来; 
. 尽量使用SQ. Server 7,不要使用Access; 
. 使用SQ. Server的特性:存储过程、Job、Join、sort、group 
. 使用SQ. Analysis,优化SQL的性能 
. 使用索引 
. 本地使用Name-pipes,远程使用Sockets 
. 准确地指定Command Type 

IIS 5的新特性 

. 可靠的重新启动 
. ASP性能提高 
. Server.Transfer比Server.Redirect更好 
. Server.Execute 
. Server.GetLastError 

   
Asp热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号