改进性能和样式的24个ASP 技巧
简介:性能优化是ASP应用程序开发的重要一环。为了最大化Active Server Pages(ASP)应用程序的性能,需要一系列的策略和技巧。本文将针对ASP应用程序和Visual Basic Scripting Edition(VBScript)的优化技巧,并讨论许多常见的陷阱和缺陷。以下是一些关于如何优化ASP应用程序性能的建议。
一、缓存策略:
技巧 1:在Web服务器上缓存常用数据。这是提高ASP应用程序性能的关键策略之一。Web服务器内存和磁盘都可以用来缓存数据。对于经常使用的数据,缓存能够显著提高数据访问速度。考虑缓存组合框、引用表、可扩展标记语言(XML)字符串等。注意,缓存策略需要仔细设计,以确保缓存的数据有效性和同步性。避免缓存垃圾数据,以免浪费存储空间。
二、避免性能瓶颈:
技巧 2:在Application或Session对象中使用数据时,避免在其中缓存非灵活组件和数据库连接。这样可以避免在应用程序运行过程中出现性能瓶颈。数据库连接是昂贵的资源,应避免在Application或Session对象中缓存数据库连接对象。相反,应该使用连接池等技术来管理数据库连接。
三、优化代码和资源管理:
技巧 3:妙用Session对象。通过合理使用Session对象,可以存储用户状态信息,提高应用程序的性能。技巧4:晚点获取资源,早点释放资源。这意味着在需要时才加载资源,并在使用完毕后及时释放资源,避免资源泄漏和浪费。
四、其他优化技巧:
技巧 5:在COM对象中封装代码以提高代码的可维护性和性能。技巧6:使用响应缓冲来提高页面生成速度。技巧7:批处理内嵌脚本和Response.Write语句以减少页面生成时间。技巧8:在开始长时间的任务之前,使用Response.IsClientConnected检查客户端是否仍然连接。避免无谓地执行长时间任务。
五、充分利用浏览器和代理缓存:
技巧 9:启用浏览器和代理缓存以减少服务器压力。当客户端请求相同的资源时,如果资源已经被缓存,服务器就不必再次发送资源,从而提高性能和响应时间。对于静态资源(如CSS文件、JavaScript文件等),可以通过设置合适的缓存头信息来利用浏览器缓存机制。
六、其他注意事项:
本文所列的建议基于http://.microsoft及其他站点的测试和实践经验。这些建议适用于对ASP开发有基本理解的开发人员,包括对VBScript和/或JScript、ASP Application、ASP Session和其他ASP内部对象(请求、响应和服务器)的理解。还需要关注与性能相关的资源链接,包括ActiveX数据对象(ADO)、部件对象模型(COM)、数据库和Internet信息服务器(IIS)配置等。务必关注这些链接以获取更多关于性能优化的信息和资源。
优化ASP应用程序性能是一个复杂而重要的任务。通过应用上述技巧和建议,可以显著提高ASP应用程序的性能和响应速度。还需要不断学习和新的技术和方法,以适应不断变化的技术环境和用户需求。缓存技巧:在Application或Session对象中存储常用数据
ASP的Application和Session对象为我们提供了在内存中缓存数据的便捷途径。这两个对象能够在HTTP调用中保持数据在内存中的存在。其中,Session数据是专门针对单个用户进行存储的,而Application数据则可以在所有用户之间共享。
那么,我们应当在何时将数据加载到Application或Session对象中呢?通常,建议在Application或Session启动时进行数据的加载。为了实现这一点,你需要在Global.asa文件中添加Application_OnStart()或Session_OnStart()函数。如果文件中尚未包含这两个函数,你可以自行添加。你也可以选择在第一次需要数据时进行加载。为此,你需要在ASP页面中添加一些代码,或者是编写可重复使用的脚本函数,这些代码会检查数据是否已经存在,如果不存在,则进行加载。这是一种典型的性能优化技术——延迟计算,即在真正需要数据时进行计算。
以下是一个具体的例子:
```asp
<% Function GetEmploymentStatusList()
Dim d
d = Application("EmploymentStatusList")
If d = "" Then
'调用FetchEmploymentStatusList函数(具体实现未显示)从数据库中取出数据,返回一个数组
d = FetchEmploymentStatusList()
Application("EmploymentStatusList") = d
End If
GetEmploymentStatusList = d
End Function %>
```
你可以为每块需要的数据编写类似的函数。
至于数据的存储格式,由于所有的脚本变量都是独特的,因此你可以存储任何类型的变量。例如,你可以存储字符串、整数或者数组。通常,你可能会选择使用这些变量类型之一来存储ADO记录集的内容。如果你需要从ADO记录集获取数据,可以手动将数据复制到VBScript变量中,一次复制一个字段。使用ADO记录集的GetRows()、GetString()或Save()方法(在ADO 2.5中)会更快更方便。关于这些方法的详细使用已经超出了本文的范围。
在上面的示例中,我们使用了GetRows()方法以数组的形式返回记录集数据。进一步的改进可能是缓存该列表的HTML版本,而不是仅仅缓存数组。这样可以提供更直接的数据使用方式,减少数据转换的步骤,从而提高应用的运行效率。具体的实现方式将依赖于你的应用需求和架构。
对于数据的缓存策略,还需要考虑到数据的时效性和更新频率。对于一些不经常变化的数据,缓存是一个很好的选择。对于经常变化的数据,频繁的缓存读取和更新可能会导致性能下降。在这种情况下,你可能需要寻找其他的解决方案,如使用数据库查询优化技术或者内存数据库等。狼蚁网站的SEO优化:一个关于数据库驱动的HTML选项列表范例
在狼蚁网站的后台管理中,我们经常需要从数据库中提取数据并生成HTML的选项列表。这是一个典型的用例,涉及到ADO数据库连接和记录集的处理。下面是一个关于如何实现的简单范例。
我们有一个函数 `FetchEmploymentStatusList`,用于从数据库中获取状态数据并返回一个HTML的`
在正常的应用程序运行中,我们可能会选择在Application或Session作用域中缓存ADO记录集以提高效率。有两个重要的注意事项:ADO必须为标记的自由线程,并且必须使用断开连接的记录集。如果不满足这些条件,缓存ADO记录集可能会导致问题。在狼蚁网站的优化策略中,我们会讨论在非灵活组件中存储COM对象的潜在风险。
当我们在Application或Session作用域中存储数据时,这些数据将一直保留在那里,直到程序主动更改、Session过期或Web应用程序重新启动。如果需要更新这些数据,我们可以通过调用特定的ASP页面来实现,或者通过函数自动定期刷新数据。在狼蚁网站的实践中,我们采用了带时间戳的缓存数据方法,在指定的时间间隔后自动刷新数据。
还有一个获取雇佣状态列表的函数`GetEmploymentStatusList`和一个用于定期更新缓存数据的子程序`updateEmploymentStatusList`。在这个子程序中,我们首先检查上次数据更新的时间,如果超过了设定的时间间隔(在这个例子中是300秒),我们就会调用`FetchEmploymentStatusList`函数从数据库中获取的数据并更新Application对象。在这个过程中,我们使用`Application.Lock()`来确保数据的一致性。
缓存策略:优化ASP性能的关键
在ASP(Active Server Pages)开发中,缓存策略对于提高应用程序性能至关重要。本文将深入如何在特定情境下选择适当的缓存策略,并强调根据具体情况选择最佳数据结构的重要性。让我们一同了解几个关键技巧,以及如何应用它们。
技巧一:数组与查找效率
在ASP中,数组是一种快速查找和存储关键数据对的方式。当我们谈论存储大量数据时,如气象站数据,数组提供了一个高效的解决方案。在选择数据结构时,索引字典的查找可能会比索引数组慢。我们应该根据具体需求和预期的性能选择数据结构。在考虑缓存策略时,了解数据结构和性能之间的关系是关键。
技巧二:结合内存与磁盘缓存
当数据量过大,无法在内存中完全缓存时,我们可以考虑将部分数据以文本或XML文件的形式缓存在Web服务器的硬盘上。结合内存和磁盘缓存,我们可以为网站制定最优的缓存策略。这种方法不仅减轻了数据库和网络的负载,而且在高负载情况下显著提高了总体通信量。特别是对于那些查询成本高昂的操作,如多表联合、复杂的存储过程或大型结果集的缓存,这种方法尤为有效。
技巧三:文件处理和磁盘缓存
技巧四:避免在Application或Session对象中缓存非灵活组件
虽然将数据缓存在Application或Session对象中是一个好主意,但缓存COM对象可能会导致严重问题。特别是非灵活组件,在Session或Application对象中缓存时可能会引起性能瓶颈。这些组件最适合在单个ASP页面上创建和销毁。在选择缓存策略时,我们需要谨慎考虑组件的灵活性。
缓存策略是ASP性能优化的关键。通过深入了解数据结构、内存与磁盘缓存的结合、文件处理以及组件的灵活性,我们可以为ASP应用程序制定高效的缓存策略,从而提高性能并优化用户体验。在选择和使用缓存策略时,务必进行充分的测试和调整,以确保最佳性能。对于无法重新编译为线程组件并集成到FTM(Flexible Threading Model)的情况,我们可以将该组件标记为ThreadingModel=Neutral。这一策略允许组件保持其原有的线程模型,同时与其他线程兼容。对于那些不希望IIS进行灵活性检查的场合,比如在Application或Session作用域中存储非灵活组件,我们可以在metabase中设置AspTrackThreadingModel为True。但请注意,我们并不推荐随意更改AspTrackThreadingModel的设置。
当尝试在Application对象中存储通过Server.createObject创建的非灵活组件时,IIS 5.0将会报错。尽管可以通过在Global.asa中使用
将非灵活组件存储在Application作用域内,对性能的影响更为严重。ASP将不得不为每个这样的组件创建专用线程,导致所有调用都必须汇集到该线程,且所有调用被串行化。这不仅意味着参数需要在内存的共享区域进行存储和昂贵的上下文切换,而且还意味着所有方法必须依次执行,无法并行处理。这在多处理器计算机上尤其明显,会严重扼杀并行机制。更糟糕的是,所有非灵活的Application作用域内的组件都会共享一个线程,使得串行化的影响更加严重。
当ADO被标记为自由线程时,缓存ADO记录集是安全的。要将ADO标记为自由线程,可以使用位于“Program Files\Common\System\ADO”目录下的Makfre15.bat文件。但请注意,如果你使用的是Microsoft Access作为数据库,不应将ADO标记为自由线程。通常,ADO记录集也必须是断开连接的。如果你不能控制站点的ADO配置(例如你是独立的软件厂商,将Web应用程序卖给客户并由他们管理配置),不缓存记录集可能是更好的选择。
词典组件是灵活对象。例如LookupTable从数据文件加载数据,对组合框数据和配置信息非常有用。来自Duwamish Books的PageCache对象提供了目录语义,与Caprock Dictionary的表现类似。这些对象或其派生对象可以构成有效的缓存策略基础。但请注意,Scripting.Dictionary对象不是灵活的,不应存储在Application或Session作用域中。我们不建议在Application或Session对象中缓存数据库连接。缓存ADO连接通常是不好的策略,因为会导致所有页面竞争使用同一个连接。关于ASP中的数据库连接与Session对象的使用
在ASP应用中,如果将Connection对象存储在Session对象中,将会为每个用户创建一个数据库连接,这会破坏连接池的优势,对Web服务器和数据库造成不必要的压力。这种做法不仅降低了性能,而且增加了系统复杂度。
为了避免这种情况,我们可以在每个使用ADO的ASP页面上创建和销毁ADO对象。这种做法利用IIS内置的数据库连接池机制,确保了数据库连接的有效性和效率。实际上,IIS会自动启用OLEDB和ODBC连接池,这意味着我们无需为每个用户维护一个独立的数据库连接。
在ASP中,我们还应避免在Application或Session对象缓存连接的记录集。因为记录集持有对数据库连接的引用,如果在应用或会话中缓存,可能会导致连接无法正确释放,造成资源浪费。正确的做法是在需要时创建记录集,使用完毕后及时断开与数据提供者和数据源的连接。
关于Session对象的使用,虽然其为每个访问Web服务器的用户创建会话带来了便利,但在高负载环境下,如每秒请求数百页或有数千个用户的情况下,Session对象的使用可能会带来性能问题。特别是在需要水平扩展的站点中,Session对象的使用可能会导致用户状态无法跨服务器共享,从而影响系统的可伸缩性。
每个Session大约有10KB的内存开销,并且所有的请求都会因此稍微变慢。Session状态一直保持活动状态,直到达到可配置的超时时间(通常为20分钟)。这意味着如果Web服务器崩溃,被"粘住"的用户的会话状态将会丢失。
为了解决这个问题,许多站点采取了实施粘性会话的策略,但这会牺牲一些可伸缩性。虽然有一些硬件和软件解决方案可以尝试解决这个问题,但它们并不完美。在设计执行重要任务的应用程序时,最好避免使用Session以及其他任何在单个Web服务器上存储用户状态的状态管理技术。
如果决定使用Sessions,应确保关闭不需要会话的内容,将其移至单独的、关闭Sessions的ASP应用程序中。这样可以将Sessions对性能的影响降到最低。对于需要在Web领域内共享和更新Application数据的情况,应考虑使用后端数据库。
在ASP编程中,有时我们并不需要用到Session对象。为了告诉ASP忽略Session对象,我们可以在页面顶部使用如下指令:
```asp
<% @EnableSessionState=False %>
```
这一指令的采用源于Session对象带来的一些挑战。ASP为了保证并发访问的安全性,任何时候只执行一个来自Session的请求。这确保了当浏览器为用户请求多个页面时,只有一个个ASP请求进入Session,避免了多线程访问Session对象时可能出现的问题。这种机制的一个潜在缺点是,它可能导致框架集中的所有页面以序列化的方式呈现,一个接一个地加载,而不是并行加载。这可能会让用户等待较长时间才能获得所有框架内容。对于那些不需要依赖Session对象的框架页,使用@EnableSessionState=False指令是非常明智的选择。
对于管理Session状态,除了直接使用Session对象外,还有许多其他方法。对于较小的状态数据(少于4KB),可以考虑使用Cookies、QueryString变量和隐藏变量。而对于较大的数据集合,如购物车信息,后端数据库是更合适的选择。关于Web服务器领域中的状态管理技术,已经有很多详细的资料,建议查阅“会话状态”以获取更多信息。
接下来,我们来一下技巧7:在COM对象中封装代码。如果你拥有大量的VBScript或JScript代码,将其移动到已编译的COM对象中可能会显著提升性能。因为已编译的代码通常比解释型代码运行得更快。通过“早期绑定”访问其他COM对象,可以更有效地调用COM对象的方法。
除了性能提升外,使用COM对象封装代码还有其他好处。它有助于将表示逻辑与业务逻辑分开,并启用代码重用。许多开发者发现,使用VB、C++或Visual J++编写的代码比ASP更容易调试。使用COM对象也有一些缺点,包括较长的初始开发时间和需要不同的编程技巧。值得注意的是,对于少量的ASP代码,封装到COM对象中可能会导致性能下降,而不是提升。在这种情况下,创建和调用COM对象的开销可能会超过已编译代码的好处。如何平衡ASP脚本和COM对象代码以获取最佳性能需要通过实践来摸索。值得注意的是,随着Windows 2000/IIS 5.0的推出,Microsoft已经大大提高了脚本和ADO的性能,这降低了已编译代码对ASP代码的性能优势。有关在ASP中使用COM对象的优缺点的更多讨论,建议查阅“ASP组件准则”和“用COM和Microsoft Visual Basic 6.0对分布式应用程序进行编程”。
最后谈谈技巧9:进程外的执行将牺牲可靠性。ASP和MTS/COM+都提供了以性能换取可靠性的配置选项。在构建和部署应用程序时,需要理解这种权衡。ASP应用程序可以配置为以三种模式之一运行,这三种模式在IIS 5.0中通过“隔离级别”来描述。包括低级、中级和高级隔离。在低级隔离模式下,ASP在所有版本的IIS中运行最快,但它也会使IIS在ASP应用程序崩溃时受到影响。深入IIS中的ASP隔离级别与COM组件配置
随着Internet Information Services (IIS)的升级,其提供的ASP(Active Server Pages)隔离级别和COM组件配置也在不断进步。这些特性对于Web站点管理员和开发者来说至关重要,因为它们直接影响到Web应用程序的性能、可靠性和安全性。本文将详细解读IIS 4.0与IIS 5.0中的隔离级别差异以及COM组件的配置选项,并给出一些建议以帮助读者做出最佳决策。
一、IIS 4.0与IIS 5.0中的ASP隔离级别
在IIS 4.0时代,Web站点管理员需要手动监视站点,并在服务器失败时运行批处理文件来重新启动服务器。而在IIS 5.0中,引入了自动重新启动失败的服务器功能,大大提高了可靠性。关于ASP的隔离级别,IIS 5.0引入了新的隔离级别——中级隔离。这是因为在IIS 5.0中,ASP运行在IIS进程之外,这种新模式称为进程外的运行方式。
中级隔离是IIS 5.0中的默认隔离级别。在这种模式下,所有被配置为按"中级"运行的ASP应用程序将共享单个进程空间,这有助于减少运行多个ASP应用程序所需的进程数。而在高级隔离级别中,每个ASP应用程序都在其自己的进程空间中运行,这可以保护ASP应用程序彼此不受干扰。为每个ASP应用程序建立独立的进程会增加开销。
在性能测试中,IIS 5.0中的ASP进程外应用程序通常比IIS 4.0中的进程内应用程序运行得更快。是否选择低、中、高级隔离级别还需根据实际需求来定。如果Web服务器需要处理大量的页面请求,那么选择中级或高级隔离级别可能更为合适。否则,除非需要高并发处理,否则低隔离级可能无需考虑。
二、COM组件的配置选项
COM组件也有其特定的配置选项。它们可以被配置为"不配置"、库应用程序或服务器应用程序。不配置的组件将运行在调用者的进程空间内。而库应用程序受益于COM+的服务,包括安全性、事务和环境支持。服务器应用程序则被配置为在其自己的进程空间中运行。
通常情况下,"库应用程序"比"服务器应用程序"具有更好的性能,因为它们与ASP运行在同一个进程中,避免了进程间调用的开销和数据的复制。当需要在ASP和COM之间传递对象时,需要确保对象实现了"按值汇集"(MBV)。否则,可能会导致性能问题。
三、推荐配置
对于IIS 4.0,推荐使用ASP的低隔离级别并使用MTS(Microsoft Transaction Server)服务器包。而对于IIS 5.0,推荐使用ASP的中隔离级别并使用COM+库应用程序。具体的配置还需根据实际需求来决定。例如,对于需要处理大量并发请求的Web服务器,可能更倾向于选择中级或高级隔离级别。而对于单一目的的Web服务器或低并发环境,低隔离级别可能更合适。
选择何种配置取决于您的具体需求和环境。建议读者在实际环境中进行测试,以确定哪种配置最适合他们的需求。也建议读者了解和熟悉相关的技术细节和最佳实践,以做出更明智的决策。许多开发者坚信,强制变量声明有助于提高应用程序的调试效率。这是因为,当开发者错误地键入变量名称并无意中创建新的变量(例如, MyXLMString 而非 MyXMLString)时,选项 Explicit 可以帮助捕捉这些错误。更重要的是,已声明的变量相较于未声明的变量,访问速度更快。在脚本运行时,每次使用未声明的变量都需要根据名称进行引用,而已声明的变量则在编译或运行时被分配了序号,通过该序号进行引用。
对于子例程和函数中的局部变量使用,这也是一个值得关注的技巧。局部变量是在子例程和函数中声明的变量,它们的访问速度通常优于全局变量。使用局部变量还可以使代码更加清晰,因此建议开发者尽可能使用局部变量。
在 ASP 中访问 COM 对象时,另一个优化技巧是将常用数据复制到脚本变量中。这是因为 COM 方法的调用相对较为耗时,而访问脚本变量的速度更快。对于 Collection 和 Dictionary 对象的访问,这种技术也可以减少查找时间。
对于多次访问的对象数据,最佳的做法是将数据存储在脚本变量中。这样可以减少 COM 方法调用,节省大量时间。例如,如果一个名为 UserID 的 QueryString 需要在特定页面中引用多次,最佳做法是在 ASP 页面的开头将该 UserID 赋值给一个变量,然后在页面中使用这个变量,而不是多次调用 Request("UserID")。
在实际编程中,访问 COM 属性的过程往往隐藏着大量的开销和复杂的步骤。例如,VBScript 中的某些代码可能看起来很简洁,但实际上却包含大量的 COM 方法调用。为了避免这种情况,可以使用更高效的编程方法,如将对象存储在变量中,然后使用该变量进行操作。这样,只需对对象进行一次,即可多次使用其属性或方法。这对于避免不必要的性能损失至关重要。
在编程的世界中,对代码的优化常常能带来效率的提升。比如在使用ASP编程时,对于数组的处理,一开始就为其设定合适的大小,而不是先设定一个较小的尺寸之后再进行扩展,这样虽然可能会稍微浪费一些内存,但却能换取执行的速度。这就像我们在生活中规划行程,一开始就考虑到所有可能的因素,虽然会做一些额外的准备,但这样在旅途中就可以避免许多不必要的麻烦。
接下来要介绍的是响应缓冲技术。为了提高数据传输的效率,我们可以选择开启响应缓冲。这种方式可以将整个页面的内容一次性输出,极大地减少了数据传输的次数,从而提高了数据传输的效率。这就像是在运送大量货物时选择整车运输而不是零散地一件件地发运,可以大大降低运输成本。但是开启响应缓冲可能会导致用户感到ASP页面的响应有些迟缓,因为他们需要等到整个页面生成完毕才能看到页面的内容。为了解决这个问题,我们可以使用Response.Flush方法。这个方法可以强制将已经生成的部分内容输出到浏览器,让用户可以看到部分页面的内容,提高了用户体验。对于生成大型页面的情况,我们也可以通过合理地使用Response.Flush来解决服务器内存使用过多的问题。
在编程中,我们还需要注意VBScript语法中的内嵌脚本和Response.Write语句的使用。过多的内嵌脚本和频繁使用Response.Write语句会导致数据的输出被分解成许多小型的数据包,这会降低数据传输的效率。我们应该尽量使用Response.Write语句一次性输出大量的脚本和HTML内容,避免频繁切换脚本引擎和HTML,从而提高性能。这就像是在工作中批量处理任务而不是一个接一个地处理,可以大大提高工作效率。
这些编程技巧都是为了提高代码的执行效率和数据传输的效率,让我们在享受技术带来的便利的也能感受到更加流畅的用户体验。狼蚁网站的SEO优化技术,堪称高效代码典范。在这段代码中,每一行都巧妙地融入了响应流的写入操作,使数据展示更加动态流畅。
当响应缓冲被禁用时,这种处理方式的效果更为显著。为了更好地优化性能,我们可以考虑启用响应缓冲,并观察其对性能的影响。在此基础上,我们可以尝试一些改进的技巧,例如使用GetString的调用替代嵌套循环等,以进一步提高代码的效率。这些技巧的应用需要根据实际情况进行选择和调整。
为了提高用户体验和响应效率,我们还可以使用Response.IsClientConnected属性来检查客户端的连接状态。在长时间执行任务之前,我们可以使用此属性检查用户是否仍然连接着。如果用户已经断开连接,我们应该立即结束请求以提高服务器的效率。这一技巧特别适用于服务器高负荷的情况,能够有效避免不必要的资源消耗和用户体验的下降。为了更好地向用户反馈进程信息,我们可以在执行响应缓冲的同时按一定的时间间隔执行Response.Flush操作。
技巧 17:使用 <OBJECT> 标签实现对象实例化
当需要引用某些仅在特定代码路径中使用的对象时,尤其是服务器或应用程序作用域的对象,我们可以选择使用 Global.asa 中的 <object runat=server id=objname> 标签进行声明,而非 Server.createObject 方法。与传统的立即创建对象的方式相比,使用 <object id=objname> 标签更加智能。在这种方式下,虽然声明了 objname,但实际上并不会立即创建它,而是在首次使用其方法或属性时才进行实例化。这是懒计算的典型应用。
技巧 18:利用 TypeLib 声明管理 ADO 对象和其他组件
在使用 ADO 时,开发人员通常包含 adovbs.txt 文件以获取对 ADO 不同常量的访问权限。这个文件必须包含在每一页中,导致编译时间和脚本大小方面的额外开销。为了解决这个问题,IIS 5.0 提供了与组件类型库绑定的能力。这使得您可以在每个 ASP 页上引用一次类型库并重复使用,无需为编译常量文件付出代价。为了访问 ADO 类型库,您可以在 Global.asa 中放置以下元数据标签之一:
<!-- METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4"} --> 或 <!-- METADATA TYPE="TypeLib" FILE="C:\Program Files\Common Files\system\ado\msado15.dll" -->
技巧 19:充分利用浏览器的验证能力
现代浏览器支持多种高级功能,如 XML、DHTML、Java 小程序以及远程数据服务。在开发 Web 应用时,我们应尽可能利用这些功能。通过执行客户端验证和数据缓存,可以减少与 Web 服务器之间的通信往返。智能浏览器可以进行一些验证工作,例如在运行 POST 之前验证信用卡的有效性。利用这些功能可以减轻服务器压力,减少网络通信量,并提高用户体验。这并不意味着我们可以忽略服务器端的验证。为了防止由于各种原因(如黑客攻击)导致的坏数据,我们仍然需要进行服务器端的验证。
技巧 20:循环中避免字符串串联的妙法
```vbscript
s = "
" & fld.Name & " | "
---|
" & fld.Value & " | "
Response.Write s
```
这种方法虽然能实现功能,但却存在性能问题。字符串的串联操作在循环中进行时,其时间消耗会随着循环次数的增加而急剧增长。具体来说,每次循环都需要重新分配内存来存储新的字符串,这无疑增加了程序的负担。一个简单的例子就能说明这一点:
```vbscript
s = ""
For i = Asc("A") to Asc("Z")
s = s & Chr(i)
Next
```
在上面的例子中,每次迭代都需要重新分配字符串并复制已有的字符,效率非常低。当处理大型记录集时,这种低效的字符串操作会导致程序运行缓慢。
为了解决这个问题,我们可以考虑使用其他方式连接字符串,比如使用 `Response.Write()` 或内嵌脚本 `<%= fld.Value %>`。开启响应缓冲后,`Response.Write` 能够快速地将数据添加到响应缓冲的末尾,避免了频繁的字符串重新分配操作。特别是在将 ADO 记录集转换为 HTML 表时,使用 `GetRows` 或 `GetString` 方法能显著提高效率。
如果是在 JScript 中连接字符串,推荐使用 `+=` 操作符进行字符串拼接,而不是每次都使用 `+` 操作符。这种方式更加高效。
技巧 21:启用浏览器和代理缓存的策略
默认情况下,ASP 禁用了浏览器和代理中的缓存。这是因为 ASP 主要用于生成动态内容,包含有时效性的信息。但有些页面在一段时间内内容变化不大,可以考虑启用浏览器和代理缓存。这样,浏览器和代理可以在一段时间内使用页面的缓存副本,减轻服务器负载,改善用户体验。
哪些动态页面可以缓存呢?例如,天气页面每5分钟更新一次,新闻主页或新闻发布页面每天更新两次,基金运营列表等基础统计数据每小时更新一次。值得注意的是,启用浏览器或代理缓存后,Web 服务器上的命中记录会大大减少。如果你需要精确测量所有页面查看或广告张贴数据,可能不希望使用浏览器和代理缓存。
浏览器缓存是由 Web 服务器通过发送 HTTP 截至期限标题来控制的。ASP 提供了两种发送这些标题的机制。要将页面设置为在未来某个时间点后过期,可以设置 `Response.Expires` 属性。例如,下面的代码通知浏览器内容在10分钟后过期:
```vbscript
<% Response.Expires = 10 %>
```
设置 `Response.Expires` 为负数或0将禁用缓存。为了确保克服服务器时钟和浏览器时钟之间的差异,建议使用较大的负数,如-1000(大于一天)。在网页开发中,有一些特定的技术细节和技巧可以帮助我们优化性能和用户体验。让我们深入这些技巧背后的理念和实践。
接下来,关于Server.Transfer和Response.Redirect的使用。虽然两者都可以用于重定向用户到不同的页面,但Server.Transfer在性能上更胜一筹。这是因为Server.Transfer在同一服务器上实现了页面跳转,避免了浏览器与服务器之间的额外往返。相比之下,Response.Redirect会强制浏览器发起新的页面请求,导致性能下降。为了提高系统性能和用户响应时间,推荐使用Server.Transfer。
关于URL结尾的斜线问题也值得关注。在指向目录的URL末尾添加斜线可以提高性能。否则,浏览器会发出额外的请求来获取目录的默认文档或目录列表。这可能导致不必要的服务器负载和延迟。建议在编写链接时始终在目录URL末尾添加斜线。在编写指向网站主页的URL时,也应遵循这一原则。在进行网站SEO优化时,也需要注意URL的结构和格式。避免省略URL中的斜线或使用错误的格式可能会影响到网站的排名和可见度。这一点对于SEO来说至关重要。对于想要进一步提升SEO效果的网站来说,应该考虑采用更为专业和细致的URL管理策略。狼蚁SEO优化方案是一种很好的参考模型。这种策略通常会考虑用户的搜索习惯和行为模式等因素来提高网站的排名和用户体验。例如根据搜索结果进行网页关键词布局和内容优化等做法可以提高网站的点击率和访问量进而提升网站的流量和转化率。至于关于服务器变量的使用我们则应当避免访问不必要的数据这可能导致服务器处理额外的请求从而影响到页面的加载速度和用户体验我们可以尽量精简代码只访问我们真正需要的数据以此提升网站的响应速度和性能。总的来说这些技巧都是为了提高用户体验和网站性能而设计的在实际开发中我们需要根据具体情况灵活应用这些技巧以达到最佳的效果。以上内容仅供参考如有更多疑问建议查阅相关文献资料或咨询专业开发者进行学习和交流。
长沙网站设计
- 改进性能和样式的24个ASP 技巧
- ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实
- ASP Err.Number 错误描述详解
- 自定义min版smarty模板引擎MinSmarty.class.php文件及用
- 阿黛尔新歌如何柔和演绎柔情爱意,触动浪漫情
- 上帝之城之旅:背后的故事与体验如何
- Material(包括Material Icon)在Angular2中的使用详解
- 起死回生的意思
- 基于递归实现的php树形菜单代码
- 探讨-如何使用PhpDocumentor生成文档
- 解析MySql与Java的时间类型
- Angular搜索场景中使用rxjs的操作符处理思路
- jQuery插件formValidator自定义函数扩展功能实例详解
- Ajax教程实例详解
- .NET Core 2.0 Preview2 发布汇总
- antd组件Upload实现自己上传的实现示例