如何写出优秀的ASP应用


怎样创建性能棒、正确性、可维护性和性能俱佳的ASP应用程序?要做什么?不做什么?本文以提纲的形式,给出了主要的Check-Points(检查点)。

什么是ASP

Active  Server  Page,简称ASP,是:

□ 连接网友界面(HTML)和商业逻辑(Business  Logic);

□ 提供一致的、容易使用的、有状态保持的、基于WEB的客户端;

□ 为那些需要事务处理的WEB  应用提供应用程序环境。


--------------------------------------------------------------------------------

ASP不是:

□ 实现商业逻辑(Business  Logic)的地方;商业逻辑应该通过COM+、MTS或者数据库来实现。


--------------------------------------------------------------------------------

ASP的使用者应该有下面的教训:

□ 开发应用程序,而不是开发一个一个的孤立ASP页面;

□ 对输入和输出进行缓存;

□ 在发布之前要测试;

□ 选择性能较好的部件;

□ 减少数据库的存取:缓存变换后的结果;

□ 使用MSMQ来处理有时间延迟的工作;


--------------------------------------------------------------------------------

站点设计
□ 你的站点想提供什么?

□ 信息架构:80/20准则;

□ 站点导航;

u  页面布局;

u  可用性;

n  使用ALT和Title属性;

n  不使用图片或者Image  Map的导航;

□ 适合大多数低版本浏览器,考虑他们对ActiveX、RDS、XML、DHTML、Java  Applet的支持状况;

□ 屏幕分辨率和屏幕颜色数

□ 是否支持WebTV、PDA…?

□ 设置IMG的width和height属性。

□ 非浏览器的访问,如自动机器人(Spider);

□ 使用帧(Frame)?

□ 使用Cookies的个性化;

□ 避免坏连接;

□ 使用meta标签;

□ 内容审核;

□ 内容检索;

□ 结果反馈:用户反馈和跟踪;

□ 减少下载时间;


--------------------------------------------------------------------------------

三层、四层应用设计

可读性、可维护性

□ 使用注释;

□ 在VBScript脚本中使用<%Option  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方式

n  隐藏的表单


--------------------------------------------------------------------------------

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变量中


--------------------------------------------------------------------------------

性能

n  Response缓冲:Response.Buffer=True

n  关闭Connection并:set  Connection=Nothing

n  使用局部变量

n  用<Object  >代替Server.CreateObject

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  可靠的重新启动

n  ASP性能提高

n  Server.Transfer比Server.Redirect更好

n  Server.Execute

n  Server.GetLastError

怎样创建性能棒、正确性、可维护性和性能俱佳的ASP应用程序?要做什么?不做什么?本文以提纲的形式,给出了主要的Check-Points(检查点)。

什么是ASP

Active Server Page,简称ASP,是:

□ 连接网友界面(HTML)和商业逻辑(Business Logic);

□ 提供一致的、容易使用的、有状态保持的、基于WEB的客户端;

□ 为那些需要事务处理的WEB 应用提供应用程序环境。


--------------------------------------------------------------------------------

ASP不是:

□ 实现商业逻辑(Business Logic)的地方;商业逻辑应该通过COM+、MTS或者数据库来实现。


--------------------------------------------------------------------------------

ASP的使用者应该有下面的教训:

□ 开发应用程序,而不是开发一个一个的孤立ASP页面;

□ 对输入和输出进行缓存;

□ 在发布之前要测试;

□ 选择性能较好的部件;

□ 减少数据库的存取:缓存变换后的结果;

□ 使用MSMQ来处理有时间延迟的工作;


--------------------------------------------------------------------------------

站点设计
□ 你的站点想提供什么?

□ 信息架构:80/20准则;

□ 站点导航;

u 页面布局;

u 可用性;

n 使用ALT和Title属性;

n 不使用图片或者Image Map的导航;

□ 适合大多数低版本浏览器,考虑他们对ActiveX、RDS、XML、DHTML、Java Applet的支持状况;

□ 屏幕分辨率和屏幕颜色数

□ 是否支持WebTV、PDA…?

□ 设置IMG的width和height属性。

□ 非浏览器的访问,如自动机器人(Spider);

□ 使用帧(Frame)?

□ 使用Cookies的个性化;

□ 避免坏连接;

□ 使用meta标签;

□ 内容审核;

□ 内容检索;

□ 结果反馈:用户反馈和跟踪;

□ 减少下载时间;


--------------------------------------------------------------------------------

三层、四层应用设计

可读性、可维护性

□ 使用注释;

□ 在VBScript脚本中使用<%Option 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方式

n 隐藏的表单


--------------------------------------------------------------------------------

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变量中


--------------------------------------------------------------------------------

性能

n Response缓冲:Response.Buffer=True

n 关闭Connection并:set Connection=Nothing

n 使用局部变量

n 用<Object >代替Server.CreateObject

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 可靠的重新启动

n ASP性能提高

n Server.Transfer比Server.Redirect更好

n Server.Execute

n Server.GetLastError

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 546
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 20 字 | UBB代码 关闭 | [img]标签 关闭