如何写出优秀的ASP应用程序
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
怎样创建鲁棒性、正确性、可维护性和性能俱佳的asp应用程序?要做什么?不做什么?本文以提纲的形式,给出了主要的check-points(检查点)。
active server page,简称asp,是: l连接网友界面(html)和商业逻辑(business logic); l提供一致的、容易使用的、有状态保持的、基于web的客户端; l为那些需要事务处理的web 应用提供应用程序环境。 asp不是: l 实现商业逻辑(business logic)的地方;商业逻辑应该通过com+、mts或者数据库来实现。 asp的使用者应该有下面的教训: l 开发应用程序,而不是开发一个一个的孤立asp页面; l 对输入和输出进行缓存; l 在发布之前要测试; l 选择性能较好的部件; l 减少数据库的存取:缓存变换后的结果; l 使用msmq来处理有时间延迟的工作; 站点设计 u 信息架构:80/20准则; u 站点导航; u 页面布局; u 可用性; n 使用alt和title属性; n 不使用图片或者image map的导航; u 适合大多数低版本浏览器,考虑他们对activex、rds、xml、dhtml、java applet的支持状况; u 屏幕分辨率和屏幕颜色数 n 是否支持webtv、pda…? n 设置img的width和height属性。 u 非浏览器的访问,如自动机器人(spider); u 使用帧(frame)? u 使用cookies的个性化; u 避免坏连接; u 使用meta标签; u 内容审核; u 内容检索; u 结果反馈:用户反馈和跟踪; u 减少下载时间; 三层、四层应用设计
u 在vbscript脚本中使用<%option explicit%>; u 使用字符串变量存储sql字符串:便于调试; u 使用server.mappath和相对路径; u 使用adodb.inc或者来引用常量,不要直接使用常量数值。 u 指定ado调用的缺省参数,避免出错; u 使用库或者部件来封装代码。
u 使用server.urlencode u 错误捕获和处理 国际化: u 使用<%codepage%> u 使用session.codepage u 在iis5.0中,response.write支持utf8 其他: u 使用#include 重用代码 u 使用分页技术 站点安全: u 客户身份验证 u 输入验证 u #include 文件不要使用.inc后缀,使用.asp或者设置.inc的应用程序映射 u 把mdb文件存放在非web路径下; u 使用adsi做安全管理
u 使用起来很方便但是很有问题; u http是一个无状态的协议; u 设计购物推车特别有用; u 不利于可伸缩性设计(scalability); u 在不需要session的页面中使用<%enablesessionstate=false%> u 尽可能完全避免使用session; u 在多个web服务器情况下不适合; u 某些部件使session运行在单一线程模式,减少了吞吐量; u 消耗内存; u session有超时的问题 u 需要客户端的浏览器打开cookie设置; u 不要在session中保存recordset,或者缓存connection对象; u 在global.asa不要使用空的session_onend; u 可选方案: n cookies u 直接状态编码:简单、容易、不安全 u 后端数据库的id作为状态值 n querystring 参数 n 如amazon的url方式 n 隐藏的表单 application变量: u 共享变量 u 不能持久保存 u 多个web服务器时不行,除非只是只读变量。 缓存 u 不要使用response.expires=0,使用负数: n response.expires=-10000; n response.addheader “pragma”,”no-cache” uresponse.addheader “cache-control”,”no-store” u 服务器缓存 u proxy缓存 u 客户端缓存 部件 u 伸缩性 u 分离商务逻辑和页面表现 u 被asp或其他环境重用 u 事务处理 u 类型安全 u 存取操作系统特性 u 保护知识产权 u 在下列情况下使用server.createobject: n mts事务处理 n 上下文安全性 n asp内部部件 n onstartpage、onendpage u 使用 u 是否保存到session或者application变量中 u
n 关闭connection并:set connection=nothing n 使用局部变量 n 用 n 不要使用session和application变量 n 不要将com对象存储在session或者application变量中 n 关闭脚本调试 n 避免重复的字符串相加 n 在费时的页面顶端使用response.isclientconnected n 使用msmq n 不要在session或者application中存储大数组 n 不要redim 数组 n 将集合类型的对象赋给临时变量 n 减小微处理器的最大线程数(运行regedt32,在hkey_local_machinesystem currentcontrolsetservicesw3svcaspparameters,增加processorthreadmax,减小这个值,看看性能的变化;或者增大这个值。) n 设置aspscriptenginecachemax,使它等于processorthreadmax*cpu个数。缺省的是30;(在系统路径下:system32inetsrv/adminisamples下,键入adsutil.vbs,设置/w3svc/aspscriptenginecachemax); n 减少session.timeout; n 在mmc中,设置asp应用程序缓冲为有效。
n css、dhtml n xml n rds n remote scripting n xmlhttp n 客户端验证 n 减小文件大小 n 尽可能避免https和ssl n 使用response.end测试性能 n 数据库 n 缓存变换后的结果; n 使用odbc连接池和oledb资源池; n 使用系统dsn或者非dsn,不要使用dsn或者文件dsn; n 使ado运行在双线程模式(both-threaded):makefre.bat; n 使用ado的field对象; n getstring或者getrows比较快; n rds和xml把负载嫁到客户端; n 不要使用select *,把字段写出来; n 尽量使用sql server 7,不要使用access; n 使用sql server的特性:存储过程、job、join、sort、group n 使用sql analysis,优化sql的性能 n 使用索引 n 本地使用name-pipes,远程使用sockets n 准确地指定command type iis 5的新特性 n asp性能提高 n server.transfer比server.redirect更好 n server.execute n server.getlasterror 该文章在 2010/7/8 0:32:32 编辑过 |
关键字查询
相关文章
正在查询... |