仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3296|回复: 19
打印 上一主题 下一主题

[学习教程] ASP网站制作之最优化ASP法式功能

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:22:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
实现规模效益。与传统的用户拥有硬件软件所有权和使用权以及传统的应用服务商提供一对一的服务模式不同,ASP拥有应用系统所有权,用户拥有使用权,应用系统集中放在ASP的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。    Active Server Pages可让静态页面很快地履行,然而,在代码中和数据库的毗连上到场一些技能,就可以让法式更
快地履行。这是一篇关于若何精制剧本法式和ASP特点来到达最大速度的文章。任安在用户点击按钮到在屏幕上呈现了局
间延迟城市让用户茫然,关于一个贸易站点,这就意味着潜伏的用户丧失。
ASP剧本的尺寸


   咱们或许不克不及掌握用户的带宽,然而经由过程优化ASP站点,咱们切实其实可以使使用到达最好功能。很多潜伏的功能播种可
以经由过程体系调剂,而不是改动代码。

   要素

   起首,有哪些要素能够影响ASP法式的功能?很不幸,有很多吗?这里仅仅是一些:

无限的带宽
办事器真个处置器和其他硬件的速度
在办事器上运转的其他历程(好比那些OpenGL屏幕回护法式中的一个)
数据库毗连形式,毗连池,或独自的数据库(好比Oracle、SQLServer、Access)
利用的言语
存储进程和SQL
利用未编译组件,而不是VB或JavsScript的ASP
优秀的编程习气,好比对毛病的处置
   关于一个有经历的具有优秀IIS常识的开辟者来讲,以上一些特点是很平凡的,然而别的一些能够十分庞杂。在这篇
文章中,让咱们来研讨一下若何做才干节俭毫秒级其余工夫,而不是试图八面玲珑。

   你的ASP剧本法式关于完成的功效是不是显得太长?这就会从入手下手影响法式的功能。关于搜集信息和格局化输入,ASP脚
本长短常有效的,然而剧本是依照行来注释履行的,所以代码越长,履行工夫越长。

   假如有一个很长的ASP剧本法式,怎样才干削减长度呢?这里有一些建议。

   你可以将它们转换为办事器端组件,换言之,就是创立一个Visual Basic DLL文件,或利用任何古代的Windows 程
序言语和COM兼容言语来创立一个未编译组件,而且在办事器上注册。关于这个功效的教程请参阅
http://www.webdevelopersjournal.com/articles/activex_for_asp.html。一个编写很好的ActiveX组件不但能大幅度提
高速度,并且,它还能大大地进步你的软件的回护水平,出格是你为第3方开辟ASP法式时。

   由于剧本是一行行注释履行的,所以扫除过剩的剧本或创立无效率的剧本,就可以进步法式功能。假如在一个单一页
面中有成百行的ASP剧本,你便可能很好地将法式朋分成用户、贸易和数据办事局部。实践上,假如这么做了,你就会发明
一些过剩的代码。好比,假如需求显示几个表格,就能够编写一个通用的表格显示函数,如许,在需求的中央挪用就能够
了。

   与尺寸相干的别的一个成绩就是包括文件的长度。当履行一个#include文件时,全部文件都被调入,就象在被包括的
文件中存在一样。所以,假如有一个甬余的包括文件,个中包括了很多全局办法和变量界说,那末就请注重它们将被调入
每个包括它们的文件中,而不论是否可用。ASP缓存了一切的扩大代码,招致了效力低下的搜刮。在这类情形下,包括文
件必需变小。虽然包括文件被办事器处置为独自的恳求,然而过量的利用#include,就会招致下载工夫的过度增添。

< !-- #include file="Header.asp" --  >
< !-- #include file="Footer.asp" -- >
< SCRIPT language="vbscript" runat="server" >

Sub Main()
  WriteHeader
  WriteBody
  WriteFooter
End Sub

Sub WriteBody()
  ...
End Sub

Main     'call sub Main
< /SCRIPT >

   假如剧本很长,注重要利用 Response.IsClientConnected 号令,这将防止因客户端不再毗连时CPU华侈运转轮回。

< %
'check to see if the client is connected
If Not Response.IsClientConnected Then
  'still connected so proceed
Else
  'disconnected
End If
% >

分离ASP代码和HTML言语号令
有人这么做吗?当描写表格时,在ASP和HTML停止切换,好比:

< HTML >
< BODY >
< %
  Set MyConn = Server.CreateObject("ADODB.Connection")
  MdbFilePath = Server.MapPath("sample.mdb")
  MyConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
  SQL_query = "SELECT * FROM Friends"
  Set RS = MyConn.Execute(SQL_query)
  WHILE NOT RS.EOF
% >
< LI >< %=RS("Name")% >: < A HREF="< %=RS("Link")% >" >Homepage< /A >
< %
  RS.MoveNext
  WEND
% >
< /BODY >
< /HTML >

   别的一个例子是利用If号令:

< %
  If Not Session("DBOpen") Then
% >
< H1 >Database not connected< /H1 >
< %
  Else
% >
< H1 >Database open< /H1 >
< %
  End If
% >

   在以上2个例子中,剧本功能能经由过程坚持ASP法式块在办事器端和利用Response.Write来发生HTML代码来进步功能,
就象上面一样:

< %
If not Session ("DBOpen") Then
   Response.Write "< H1 >Database not connected< /H1 >"
Else
   Response.Write "< H1 >Database open< /H1 >"
End If
% >

关于大且长的剧本,你可以经由过程下面的办法看到分明的功能进步。
   会话形态

   无庸置疑,经由过程session在ASP中坚持形态是一个十分主要的特点。但是,这将影响法式的功能。很分明,办事器的伸
缩性由于session仅仅能局限于单一办事器而酿成一个成绩,一个session为每个用户都要损耗资本。

   假如不利用session变量,并且实践上也能够不需求,由于利用埋没表单域、在数据库中存储数值和利用查询字符
串可以完成session的功效,这时候,就应当屏障session形态,代码以下:

   @EnableSessionState = False

   如许,ASP就将不再反省session信息。

   假如的确要依托session形态,那末请防止在session对象中寄存大批的数据。假如设置了客户真个HTTP Cookies,那
么IIS中的Session是失效的,而且直到session被中断或到期,为每个session分派的内存空间将一向保存。因为这个
缘由,当有很多并发用户会见站点时,资本将会很快耗尽。


数据库会见

   存取数据库将会很快地减慢法式,然而没无数据库,很多站点也不可。不要利用内植的SQL语句来存取数据库,你可
以经由过程利用存储进程来会见数据库,这将会博得很大的法式功能,并且,也十分得天真。利用存储进程,并共同ActiveX
Data Objects(ADO),就可以最大水平地掌握存储进程若何输入。

   确认数据库经由了索引,由于这将直接影响到使用法式的全体功能。同时,注重在数据库上运转更新统计法式,从而
更好地跟踪数据的散布。注重,一些数据库,好比MS Access,不适于企业级使用,而SQL Server 7.0或Oracle更适于做
这些。

   让SQL做设计好的任务,包含对数据停止盘算、到场、排序和分组。不要用其他言语写这些功效,可以编写一个查询
来完成。

   任何要盘算的字段就是上面所示的复杂语法:

   SELECT count(*) FROM publishers WHERE state='NY'

   假如要盘算一个特别字段,必需先按谁人字段分组,不然,将不会任务:

   SELECT count(city),city FROM publishers GROUP BY city

   接着肯定排序办法:

   SELECT * FROM TableName WHERE FieldName >50 OR FieldName< 100 ORDER BY FieldName2, FieldName3

   依然利用ODBC体系或文件DSN来毗连数据库,或利用很快的OLEDB手艺来毗连。利用后者,当挪动Web文件时,不
再需求修正设置装备摆设。

   OLEDB位于使用法式与ODBC层之间。在ASP页面中,ADO就是位于OLEDB之上的法式。挪用ADO时,起首发送给OLEDB,然
后再发送给ODBC层。可以直接毗连到OLEDB层,这么做后,将进步办事器真个功能。怎样直接毗连到OLEDB呢?

   假如利用SQLServer 7,利用上面的代码做为毗连字符串:

strConnString = "DSN='';DRIVER={SQL SERVER};" & _
                "UID=myuid;PWD=mypwd;" & _
                "DATABASE=MyDb;SERVER=MyServer;"

   最主要的参数就是“DRIVER=”局部。假如你想绕过ODBC而利用OLEDB来会见SQL Server,利用上面的语法:

strConnString ="Provider=SQLOLEDB.1;Password=mypassword;" & _
               "Persist Security Info=True;User ID=myuid;" & _
               "Initial Catalog=mydbname;" & _
               "Data Source=myserver;Connect Timeout=15"

   为何这很主要

   如今你能够奇异为何进修这类新的毗连办法很关头?为何不利用尺度的DSN或体系DSN办法?好,依据Wrox在他
们的ADO 2.0法式员参考书本中所做的测试,假如利用OLEDB毗连,要比利用DSN或DSN-less毗连,有以下的功能进步表
现:

   功能对照
SQL Access
  OLEDB DSN   OLEDB DSN
毗连工夫: 18 82 毗连工夫: 62 99
反复1,000个纪录的工夫: 2900 5400 反复1,000个纪录的工夫: 100 950

   这个结论在Wrox的ADO 2.0法式员参考宣布。工夫是以毫秒为单元,反复1,000个纪录的工夫是以办事器油标的体例
盘算的。

   ● 只要能够,就利用客户端剧本对用户输出停止验证,以此来最小化HTTP恳求的轮回操作。

   假如阅读用具备履行JavaScript或其他剧本的才能,请充实使用,从而束缚办事器真个资本。

   上面的VBScript剧本在用户的阅读器端运转,反省用户信息,然后再提交给办事器:

< SCRIPT LANGUAGE="VBScript" >
< !--
Sub btnEnter_OnClick
  Dim TheForm
  Set TheForm = Document.MyForm
  If IsNumeric(TheForm.Age.Value) Then   
    TheForm.submit
  Else
    Msgbox "Please enter a numerical age."
  End if
End Sub
//-- >
< /SCRIPT >

< FORM  method="POST" name=MyForm  action="myfile.asp"   >  
   Name: < INPUT typr="text" name="Name"  >
   Age: < INPUT type="text" name="Age"  >
   < INPUT type="button" name="btnEnter"  value="Enter" >
< /FORM >

   ● 利用部分变量,而不要利用全局变量

   由于部分变量可以很快地被ASP剧本引擎所存取,全部名字空间不用被搜刮。防止重界说数组,在数组初始化时就分
配足够的尺寸,会大大地进步效力。这么做能够华侈一些内存,然而确博得了速度,特别是在办事器有很大的负载时。

   ● 利用< OBJECT > 标志创立对象

   假如需求援用一个实践上能够不被利用的对象,利用< OBJECT >标志来例示它们,而不要用Server.CreateObject。
后者将招致对象当即被创立,而< OBJECT >是当对象被初次援用时才被创立。

   好比,上面的代码演示了利用< OBJECT >标志来创立一个使用法式局限内的AD Rotator对象实例:

< OBJECT runat=server scope=Application id=MyAds progid="MSWC.AdRotator" >
< /OBJECT >
   然后,就能够在其他页面援用它:

   ● 翻开“Option Explicit”

   在VB和VBScript中,你可以不必明白地界说就利用变量。然而翻开“明白界说变量”选项,将有助于进步法式功能。
不决义的部分变量是很慢的,由于在变量创立前,全部的名字空间都要搜刮,看看是不是变量已存在。所以,请翻开
“Option Explicit”,这是一个好的编程习气。

   ● 慎用 Server.MapPath

   除非必需,不要利用Server.MapPath!相反,假如晓得途径,就利用明白的文字途径来暗示。利用MapPath,将请求
IIS去取回以后办事器途径,这意味着对IIS一个特别的恳求,从而下降了法式功能。别的的完成这个任务的办法是在部分
变量中保留途径信息,当需求利用它时,办事器就不必再被过度恳求。

   反省如何做

   你可以经由过程上面的东西来测算办事器功能:Task Manager,NetMon 和 PerfMon。用WCAT (Web Capacity Analysis
Tool)丈量办事器的容量。你可使用WCAT来反省Internet信息办事和收集设置装备摆设若何呼应分歧的客户端对内容、数据和HTML
页面的恳求。测试的了局可以被用来决意若何最优化办事器和收集设置装备摆设。

   经由过程最优化ASP使用法式功能,Web站点使用将会变得很快,终究做到:当不需求时,就不需求去做影响功能的点击。

   总结

   当谈到ASP功能时,要触及到很多方面,本文已会商了一些。然而,关于每一个详细的使用,应当有独自的思索,并
不是这里会商的技能都能很适合地知足。
缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。
只想知道 该用户已被删除
沙发
发表于 2015-2-16 00:34:28 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
因胸联盟 该用户已被删除
板凳
发表于 2015-3-4 19:21:53 | 只看该作者
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-3-11 20:47:05 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
变相怪杰 该用户已被删除
5#
发表于 2015-3-13 08:07:15 | 只看该作者
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-17 20:53:42 | 只看该作者
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
分手快乐 该用户已被删除
7#
发表于 2015-3-25 01:50:40 | 只看该作者
掌握asp的特性而且一定要知道为什么。
飘飘悠悠 该用户已被删除
8#
发表于 2015-4-10 08:41:12 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
兰色精灵 该用户已被删除
9#
发表于 2015-4-18 02:16:12 | 只看该作者
尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
飘灵儿 该用户已被删除
10#
发表于 2015-4-27 02:49:50 | 只看该作者
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
莫相离 该用户已被删除
11#
发表于 2015-5-6 18:39:28 | 只看该作者
我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
第二个灵魂 该用户已被删除
12#
发表于 2015-6-10 15:39:13 | 只看该作者
封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。
精灵巫婆 该用户已被删除
13#
发表于 2015-6-12 02:37:43 | 只看该作者
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
活着的死人 该用户已被删除
14#
发表于 2015-6-27 20:55:44 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
金色的骷髅 该用户已被删除
15#
发表于 2015-7-8 12:46:44 | 只看该作者
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
简单生活 该用户已被删除
16#
发表于 2015-7-9 20:42:04 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
admin 该用户已被删除
17#
发表于 2015-7-12 22:10:35 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
不帅 该用户已被删除
18#
发表于 2015-7-13 09:17:02 | 只看该作者
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
谁可相欹 该用户已被删除
19#
发表于 2015-7-25 15:11:55 | 只看该作者
我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。
柔情似水 该用户已被删除
20#
发表于 2015-9-23 15:11:52 | 只看该作者
下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-27 11:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表