二十八条改善ASP性能和外观的技巧(四)


<!--METADATANAME=?MicrosoftActiveXDataObjects2.5Library?TYPE=?TypeLib?UUID=?{00000205-0000-0010-8000-00AA006D2EA4}?-->或是

<!--METADATATYPE=?TypeLib?FILE=?C:/ProgramFiles/CommonFiles/system/ado/msado15.dll?-->技巧19:利用浏览器的验证功能现今的浏览器对一些高级功能如XML、DHTML、Java小程序和远程数据服务提供支持。尽可能使用这些功能。所有这些技术都可以执行客户机端验证和数据缓存,免去了到Web服务器的往返。如果您在运行一个智能浏览器,那么浏览器就能为您进行一些验证(例如,在执行POST之前,检查信用卡校验和是否有效)。尽可能使用这一功能。通过减少客户-服务器之间的往返,可降低Web服务器上的负载,并能减少网络通信量(虽然发送到浏览器的第一个页面可能比较大)以及服务器访问的任何后端资源。此外,用户不必像住常一样读取新页,从而用户的感觉会好一些。这样做并不意味着您可以不进行服务器端验证-您还应始终进行服务器端验证。这可以防止由于某种原因(如黑客,或浏览器不运行客户机端验证例程)客户机产生错误的数据。人们已经进行了大量的工作,开发“独立于浏览器”的HTML。正是由于这种忧虑,开发人员不愿再使用流行的浏览器功能,但这些功能本可以改善性能。对于一些真正的高性能站点,必须关心浏览器“访问”问题,一个好的策略是优化页面,使其适应流行的浏览器。使用浏览器功能组件,可以在ASP中方便地检测到浏览器功能。MicrosoftFrontPage等工具有助于设计适合于浏览器和指定HTML版本的代码。参见WhenisBetterWorse?WeighingtheTechnologyTrade-Offs,以了解更进一步的讨论。技巧20:避免在循环语句中使用字符串串联许多人在循环语句中建立一个字符串,如下所示:s=?<table>?&vbCrLfForEachfldinrs.Fieldss=s&?<th>?&fld.Name&?</th>?NextWhileNotrs.EOFs=s&vbCrLf&?<tr>?ForEachfldinrs.Fieldss=s&?<td>?&fld.Value&?</td>?Nexts=s&?</tr>?rs.MoveNextWends=s&vbCrLf&?</table>?&vbCrLfResponse.Writes采用这种方法会出现一些问题。第一个问题是反复串联字符串需要花两次方的时间,更通俗地说,运行这种循环语句所花的时间与记录数乘以字段数所得值的平方成正比。举一个更简单的例子,就可以更清楚地说明这一问题

s=??Fori=Asc(?A?)toAsc(?Z?)s=s&Chr(i)Next

在第一次迭代中,您获得了一个字符的字符串?A?。在第二次迭代中,VBScript必须重新分配字符串并将两个字符(?AB?)复制到s中。在第三次迭代中,它还必须再次重新分配s并将三个字符复制到s中。在N次(第26次)迭代中,它必须重新分配并将N个字符复制到s中。总共就是1+2+3+...+N,即N*(N+1)/2次复制。在上面的记录集举例中,如果有100个记录和5个字段,内循环将执行100*5=500次,所有的复制和重新分配所花的时间与500*500=250,000成正比。这对于中等大小的记录集来说复制操作太多了。在本例中,代码可以用Response.Write()或内嵌脚本(<%=fld.Value%>)替代字符串串联来改进。如果启用了响应缓冲的话(应该的),这样做就会更快,因为Response.Write只将数据附加到响应缓冲的末尾。并不涉及重新分配,因此效率很高。在将ADO记录集转换为HTML表的特定情况下,应考虑使用GetRows或GetString。如果在JScript中串联字符串,特别建议使用+=运算符,即,使用s+=?某字符串?,而不使用s=s+?某字符串?。技巧21:启用浏览器和代理缓存在默认情况下,ASP禁止在浏览器和代理中进行缓存。这是有意义的,因为就实质而言ASP页面是动态的,上面有随时间不断变化的潜在信息。如果页面不要求在每个视图上进行刷新,您应启用浏览器和代理缓存。这可使浏览器和代理在一定的时间内使用页面的“缓存”副本,您可以控制时间的长短。缓存可以大大减轻服务器上的负载,缩短用户的等待时间。哪一种动态页面可作为要缓存的页面呢?下面举一些例子:

  • 天气预报页面,在此页面上,每隔5分钟更新一次天气预报。
  • 列出新闻条目或新闻稿的主页,它一天更新两次。
  • 共同基金业绩列表,在此列表中,基本统计信息每隔几小时更新一次。

注意,在使用浏览器或代理缓存的情况下,Web服务器上记录的访问次数减少了。如果您想准确地测量所有页面视图或张帖公布,您就不希望使用浏览器和代理缓存。浏览器缓存由HTTP“过期”报头控制,该报头由Web服务器发送给浏览器。ASP提供两个简单的机制发送此报头。要设置页面使其过多少分钟后到期,则应设置Response.Expires属性。下面的例子告诉浏览器内容在10分钟内过期:<%Response.Expires=10%>若将Response.Expires设置为负数或0,则禁用缓存。一定要使用大的负数,如-1000(略多于一天),以避免服务器和浏览器时钟之间的不匹配。第二个属性Response.ExpiresAbsolute将使您设置内容过期的具体时间:<%Response.ExpiresAbsolute=#May31,200113:30:15#%>您可以不使用Response对象设置过期时间,而将<META>标记写进HTML,通常写在HTML文件的<HEAD>部分。一些浏览器将遵照此指令,而代理则不然。<METAHTTP-EQUIV=?Expires?VALUE=?May31,200113:30:15?>最后,您可以使用Response.CacheControl属性,指示其内容是否可以让HTTP代理缓存。若将此属性设置为“Public”,代理就可以缓存此内容。<%Response.CacheControl=?Public?%>在默认情况下,此属性被设置为“Private”。注意,对于显示某用户特定数据的页面,不应启用代理缓存,因为代理可能给用户提供属于其他用户的页面。<!--p>技巧22:尽可能使用Server.Transfer代替Response.RedirectResponse.Redirect让浏览器请求另一个页面。此函数常用来将用户重定向到一个登录或错误页面。因为重定向强制请求新页面,结果是浏览器必须到Web服务器往返两次,且Web服务器必须多处理一个请求。IIS5.0引入了一个新的函数Server.Transfer,它将执行转移到同一台服务器上的另一个ASP页。这样就避免多余的浏览器-Web-服务器的往返,从而改善了总体系统性能以及缩短了用户的响应时间。检查“重定向”中的“新的方向”,上面应该是Server.Transfer和Server.Execute。另请参见LeveragingASPinIIS5.0,了解IIS5.0和ASP3.0新功能的完整列表。技巧23:在目录URL中使用后斜杠一个相关的技巧是确保在指向目录的URL中使用后斜杠(/)。如果您省略了后斜杠,浏览器就会向服务器发出请求,只是为了告诉服务器,它在请求目录。浏览器就会发出第二个请求,将斜杠附加到URL后面,只有此后,服务器才能以该目录的默认文档或目录列表(如果没有默认文档且启用了目录浏览的话)响应。附加斜杠可省去第一个、无用的住返。为便于用户阅读,可以省略显示名称中的后斜杠。例如,写:<ahref=?http://msdn.microsoft.com/workshop/?title=?MSDNWebWorkshop?>http://msdn.microsoft.com/workshop</a>这也适用于指向Web站点上主页的URL:使用下面的:<ahref=?http://msdn.microsoft.com/?>,而不使用<ahref=?http://msdn.microsoft.com?>。技巧24:避免使用服务器变量访问服务器变量会使Web站点向服务器发出一个特殊请求,并收集所有服务器变量,而不只是您请求的那个变量。这种情况类似于,在发霉的阁楼上,在一个文件夹中查找某个文件。当您想要找那个文件时,您必须去阁楼上,先找到文件夹,然后才能找到这份文件。当您请求服务器变量时,发生的情况是一样的-您第一次请求服务器变量时,就会使性能受到影响。后面的对其它服务器变量的请求,则不会对性能产生影响。决不要访问非限定的Request对象(例如,Request("Data"))。对于不在Request.Cookies、Request.Form、Request.QueryString或Request.ClientCertificate中的项目,则隐式调用Request.ServerVariables。Request.ServerVariables集合比其它集合慢得多。技巧25:升级到最新和最出色的系统组件是恒定的,我们建议您将它们升级到最新和最好的配置。最好升级到Windows2000(因此,也应升级到IIS5.0、ADO2.5、MSXML2.5、InternetExplorer5.0、VBScript5.1和JScript5.1)。在多处理器计算机上,实施IIS5.0和ADO2.5可显著改善性能。在Windows2000下,ASP可以很好地扩展到四个处理器或更多,而在IIS4.0下,ASP的扩展性不能超出两个处理器。在应用程序中使用的脚本代码和ADO越多,升级到Windows2000之后,性能的改善就会越多。如果目前还不能升级到Windows2000,您可以升级到SQLServer、ADO、VBScript和JScript、MSXML、InternetExplorer和NT4ServicePacks的最新版本。它们均可提高性能和可靠性。技巧26:优化Web服务器有多种IIS优化参数可以改善站点性能。例如,对于IIS4.0,我们常常发现,增加ASPProcessorThreadMax参数(参见IIS文档)可以显著改善性能,特别是在倾向于等待后端资源(如数据库)或其它中间产品(如屏幕刷)的站点上。在IIS5.0中,您可能发现启用ASPThreadGating比查找一个AspProcessorThreadMax最佳设置效率更高,这一点现在已为大家所熟知。有关较好的参考资料,参见下面的优化IIS。最佳的配置设置取决于(其中一些因素)应用程序代码、运行所在的系统硬件和客户机工作负荷。找到最佳设置的唯一方法是进行性能测试,这是我们在下一个技巧中所要讨论的。技巧27:进行性能测试正如我们在前面已经讲过,性能是一个特征。如果您想要改善站点的性能,那么就制定一个性能目标,然后逐步改进,直到达到目标为止。不要,就不进行任何性能测试。通常,在项目结束时,再作必需的结构调整已经为时太晚,您的客户将为此感到失望。将性能测试作为您日常测试的一部分来进行。可以对单个组件分别进行性能测试,如针对ASP页或COM对象,或将站点作为一个整体来测试。许多人使用单个浏览器请求页面,来测试Web站点的性能。这样做就会给您一个感觉,即站点的响应能力很好,但这样做实际上并不能告诉您在负载条件下站点的性能如何。一般情况下,要想准确地测试性能,您需要一个专门的测试环境。此环境应包括硬件,其处理器速度、处理器数量、内存、磁盘、网络配置等方面与生产环境的硬件相似。其次,您必须指定客户机的工作负荷:有多少同时的用户,他们发出请求的频率,他们点击页面的类型等等。如果您没有站点实际使用情况的数据,您必须估计一下使用的情况。最后,您需要一个可以模拟预期客户机工作负荷的工具。有了这些工具,您就可以开始回答诸如“如果我有N个同时的用户,那么需要多少服务器?”之类的问题。您还可以找出出现瓶颈的原因,并以此为目标进行优化。下面列出了一些好的Web负载测试工具。我们特别推荐MicrosoftWebApplicationStress(WAS)工具包。WAS可使您记录测试脚本,然后模拟数百或成千上万个用户访问Web服务器。WAS报告很多统计信息,包括每秒钟的请求数,响应时间分布情况和错误计数。WAS有丰富的客户机界面和基于Web的界面两种,Web界面可使您进行远程测试。一定要阅读IIS5.0TuningGuide。

]技巧28:阅读资源链接下面是一些与性能有关的出色的资源链接。如果您想了解有关信息,请阅读DevelopingScalableWebApplications。资源优化ASP脚本优化IISADO和SQLServerASP组件和线程模型词典组件会话状态性能和可扩展性工具书目ASPWeb站点ASP样式XML

优化ASP脚本DevelopingScalableWebApplicationsGotAnyCache?NancyWinnickCluts著MaximizingthePerformanceofYourActiveServerPages,NancyWinnickCluts著15Seconds:PerformanceSectionEnhancingPerformanceinASP-PartI,WaynePlourde著WhenisBetterWorse?WeighingtheTechnologyTrade-Offs,NancyWinnickCluts著SpeedandOptimizationResources,CharlesCarroll著优化IISTheArtandScienceofWebServerTuningwithInternetInformationServices5.0LeveragingASPinIIS5.0,J.D.Meier著TuningIIS4.0forHighVolumeSites,MichaelStephenson著TuningInternetInformationServerPerformance,MikeMoore著NavigatingtheMazeofSettingsforWebServerPerformanceOptimization,ToddWanke著ManagingInternetInformationServer4.0forPerformance,HansHugli著ADO和SQLServerTopTenTips:AccessingSQLThroughADOandASP,J.D.Meier著ImprovethePerformanceofyourMDACApplication,SureshKannan著PoolingintheMicrosoftDataAccessComponents,LelandAhlbeck和DonWillits合著SQLServer:PerformanceBenchmarksandGuidesImprovingthePerformanceofDataAccessComponentswithIIS4.0,LelandAhlbeck著MicrosoftDataAccessComponents(MDAC)andActiveXDataObjects(ADO)PerformanceTips,LelandAhlbeck著MicrosoftSQLServer7.0PracticalPerformanceTuningandOptimization-TheServerPerspective,DamienLindauer著MicrosoftSQLServer7.0PracticalPerformanceTuningandOptimization-TheApplicationPerspective,DamienLindauer著AccessingRecordsetsovertheInternet,DinoEsposito著ASP组件和线程模型ASPComponentGuidelines,J.D.Meier著Q243548:INFO:DesignGuidelinesforVBComponentsunderASPThreadingModelsExplained,NancyWinnickCluts著SoHappyTogether?UsingActiveXcomponentswithActiveServerPages,NancyWinnickCluts著DevelopingActiveServerComponentswithATL,GeorgeReilly著AgilityinServerComponents,NeilAllain著BuildingHigh-PerformanceMiddle-TierComponentswithC++,JonFlanders著ActiveServerPagesandCOMApartments,DonBox著HouseofCOM:ActiveServerPages,DonBox著HouseofCOM:Contexts,DonBox著HouseofCOM:PerformanceTrade-offsoftheWindows2000ComponentExecutionEnvironment,DonBox著BuildingCOMComponentsThatTakeFullAdvantageofVisualBasicandScripting,IvoSalmre著ComponentDesignPrinciplesforMTS词典组件CreatingaPageCacheObject,RobertColeridge著AbridgingtheDictionaryObject:TheASPTeamCreatesaLookup-TableObject,RobertCarter著CaprockDictionarySiteServerCommerceEditionincludesadictionarycomponent会话状态Q175167:HOWTO:PersistingValuesWithoutSessionsQ157906:HOWTO:HowToMaintainStateAcrossPageswithVBScriptXML-basedPersistenceBehaviorsFixWebFarmHeadaches,AaronSkonnard著HouseofCOM:StatelessProgramming,DonBox著性能和扩展性BlueprintforBuildingWebSitesUsingtheMicrosoftWindowsDNAPlatformServerPerformanceandScalabilityKillers,GeorgeReilly著MicrosoftVisualStudioScalabilityCenterFitch&MatherStocks2000TuningtheFMStocksApplicationHigh-PerformanceVisualBasicApps,KenSpencer著DuwamishBooks,Phase4TopWindowsDNAPerformanceMistakesandHowtoPreventThem,GaryGeiger和JonPulsipher合著BuildingfromStaticHTMLtoHigh-PerformanceWeb-Farms,ShawnBice著工具MicrosoftWebApplicationStressToolICan’tStressItEnough--LoadTestYourASPApplication,J.D.Meier著WindowsDNAPerformanceKitMonitoringEventsinDistributedApplicationsUsingVisualStudioAnalyzer,Mai-lanTomsen著书目ProfessionalActiveServerPages3.0,WroxPress(特别是第26章:OptimizingASPPerformance,GeorgeReilly和MatthewGibbs合著)。MicrosoftInternetInformationServices5.0ResourceGuide(与Windows2000ServerResourceKit在一起),MicrosoftPress。MicrosoftInternetInformationServerResourceKit(用于IIS4.0),MicrosoftPress。ProgrammingDistributedApplicationswithCOMandMicrosoftVisualBasic6.0,TedPattison著,MicrosoftPress。EffectiveCOM,DonBox、KeithBrown、TimEwald和ChrisSells合著;Addison-Wesley。DevelopingWebUsability:ThePracticeofSimplicity,JakobNielsen著,NewRiders。ASPWeb站点MicrosoftTechNetforIISLearnASP.com4GuysFromRolla.com15Seconds.comAspToday.comAsp101.comAspLists.com。许多专业的邮件列表包括:FastCode!ASPAdvancedNotNewbieStateManagementScalabilityVisualBasicComponentsXMLC++/ATLComponentBuildingUseIt.com:Web可用性ASP样式ASPBestPractices,GeorgeReilly著ASPQuickLessons,CharlesCarroll著PlanningforASP,JohnMeade著ASPGuidelines,J.D.Meier著XMLInsideXMLPerformance,ChrisLovett著InsideMSXML3Performance,ChrisLovett著原文<!--p>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值