• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 最優化ASP程序性能(轉)

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    Active Server Pages可以讓動態頁面很快地執行,但是,在代碼中和 數據庫 的連接上加入一些技巧,就能讓程序更快地執行。這是一篇關于如何精制腳本程序以及ASP特征來達到最大速度的文章。任何在用戶點擊按鈕到在屏幕上出現結果間延遲都會讓用戶茫然,對于一
        Active Server Pages可以讓動態頁面很快地執行,但是,在代碼中和數據庫的連接上加入一些技巧,就能讓程序更快地執行。這是一篇關于如何精制腳本程序以及ASP特征來達到最大速度的文章。任何在用戶點擊按鈕到在屏幕上出現結果間延遲都會讓用戶茫然,對于一個商業站點,這就意味著潛在的用戶損失。
    ASP腳本的尺寸


       我們也許不能控制用戶的帶寬,但是通過優化ASP站點,我們的確能夠使應用達到最佳性能。許多潛在的性能收獲可以通過系統調整,而不是改變代碼。

       因素

       首先,有哪些因素可能影響ASP程序的性能?很不幸,有許多嗎?這里僅僅是一些:

    有限的帶寬
    服務器端的處理器和其他硬件的速度
    在服務器上運行的其他進程(比如那些OpenGL屏幕保護程序中的一個)
    數據庫連接模式,連接池,或者單獨的數據庫(比如Oracle、SQLServer、Aclearcase/" target="_blank" >ccess)
    使用的語言
    存儲過程和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分配的內存空間將一直保留。由于這個原因,當有許多并發用戶訪問站點時,資源將會很快耗盡。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>