15種asp提示(中文版)

來源:互聯網
上載者:User
技巧|中文 作者:Nancy Cluts    微軟技術開發部工程師

技巧1:給應用程式層檔案使用GLOBAL.ASA
技巧2:從產品原始碼中移去HTML注釋
技巧3:多個Response.write聲明
技巧4:使用<OBJECT>標誌例示對象
技巧5:儘可能的使用本地(局部)變數
技巧6:避免多維陣列
技巧7:避免公用(全域)變數
技巧8:使用文字路徑
技巧9:使用"Dictionary"對象
技巧10:充分利用瀏覽器的回退功能
技巧11:避免使用伺服器端變數
技巧12:使用"option explicit"      
技巧13:將採集到的值拷貝到本地(局部)變數當中
技巧14:謹慎使用session對象
技巧15:做效能測試

*技巧1:給應用程式層檔案使用GLOBAL.ASA

    將檔案載入GLOBAL.ASA中的一個應用程式層數組中,而不是通過使用ASP檔案系統對象在頁面上讀取檔案。
    GLOBAL.ASA可用於指定事件指令碼,也可用於聲明擁有session或應用程式範圍的對象。它不直接顯示給使用者,而是儲存應用程式層事件的資訊和對象。然後通過頁面就可以指向存有資料的應用程式層數組。這就意味著每有一個伺服器端請求就讀一次檔案,不是每個使用者每頁讀一次。你可以運行一個獨立的ASP檔案去重新整理應用程式層數組的內容,同時你也可以考慮使用dictionary對象(見技巧9)。
    這個技巧可以大大加快你的系統速度。
    那麼將如何?該技巧呢?
    如果你是一個指令碼編寫人員,必須使用檔案系統對象讀取檔案放入一個數組或一個dictionary對象中。然後在GLOBAL.ASA中讀取檔案並且把數組(放有你讀取的檔案內容)或dictionary對象放到應用程式層聲明中。這樣就可讓使用者在數組或dictionary對象中存取資訊,而不必每次通過一個ASP請求去提交資訊。
    但也許你會想“如果緩衝中的內容需要更新又該怎麼辦呢?我敢打賭不會用到。”其實不然。如果緩衝中的內容需要更新,你可以調用一個包含有可執行應用程式鎖定命令指令碼的僅管理員可存取的ASP檔案,在數組或dictionary對象中更新緩衝資訊,最後執行應用程式鎖定命令。   

*技巧2:從產品原始碼中移去HTML注釋(IIS3.0適用)
   不錯,難寫的肯定也難懂。開個玩笑,這不代表要你把所有的HTML注釋去掉(指令碼注釋就挺好的),大範圍的HTML文本都能成批的拷貝到用戶端。這樣的話,你的指令碼在IIS3.0上會運行得更快(在IIS4.0中,HTML注釋不再會導致執行速度的降低)。

*技巧3:多個Response.write聲明
     如果你是在代碼中的好幾個地方用<%=...%>格式書寫輸出結果,那麼考慮一下把這些結果合到一塊,用一個Response.write語句寫出來。然後你再看看你的HTML代碼和vbscript指令碼的組成。不要把HTML和vbscript指令碼散布得太開,盡量寫成成塊的HTML和vbscript指令碼。

*技巧4:使用<OBJECT>標誌例示對象
   如果你需要指向那些也許用不著的對象,那麼就用<OBJECT>標誌例示,而不是用Server.createobject.用Server.createobject將立刻產生該對象,如果你以後都用不著它的話,就等於浪費資源。

*技巧5:儘可能的使用本地(局部)變數
  (以下的新技巧將取代較早前發布的“在一行內定義變數”,其中包含有一些錯誤觀點):
   局部變數是在子程式和函數中定義的(也就是常說局部範圍的變數),這些變數被編譯成數字指向並放入一張表中。這些局部變數的指向可以通過一次編譯完成。而全域變數則是在運行時被執行的。這就意味著局部變數的存取要比全域變數快好幾倍。而且,多維全域變數是其中最慢的,當第一次使用一個多維全域變數時,在新的對象產生之前,就要在整個物件模型中搜尋一遍同名的對象。
  以下是一個非常常見的例子:
  Foo.bar.blah.baz = Foo.bar.blah.qaz(1)
  If Foo.bar.blah.zaq = Foo.bar.blah.abc then
  運行時產生如下結果:
1)變數Foo被定義為一個全域變數
2)變數bar被定義為Foo的一個成員
3)變數blah被定義為Foo.bar的一個成員
4)變數qaz被定義為Foo.bar.blah的一個成員
5)調用 Foo.bar.blah.quaz(1)
6)重複1至3。系統並不知道如果調用qaz改變了物件模型1-3步必須重新執行
7)定義baz為 Foo.bar.blah的成員,輸出值
8)重複1-3,執行zaq
9)重複1-3,執行abc
  正如你看到的,效率極其低下,最快的方法就是把這些代碼寫在vbscript中:
Set myobj = Foo.bar.blah ' do the resolution of blah ONCE
Myobj.baz = myobj.qaz(1)
If Myobj.zaq = Myobj.abc then

*技巧6:避免重複定義數組
      當我們在使用dim時,避免重新定義數組。因為你可能要用redim去重新定義數組的大小。至於要做這樣的操作的話,如果你的機器記憶體不是很大,那麼最好在一開始就考慮到最壞的打算去設定數組的長度或者設定最佳狀態時的長度,在非常必要時才使用redim。當然這樣並不意味著要去增加記憶體,如果你不是很需要的話。
      以下舉例說明不恰當的使用redim
      <%
dim MyArray()
Redim MyArrray(2)
MyArray(0) = "hello"
MyArray(1) = "good-bye"
.
.
.
some other code where you end up needing
more space happens then ...
Redim Preserve MyArray(5)
MyArray(2) = "more stuff"
MyArray(3) = "even more stuff"
MyArray(4) = "yet more stuff"
%>
   其實在開始就定義myarray(5),而以後需要的話再用redim去增加他的大小,這樣的話可能會佔用一些記憶體,但速度就要快得多了。

*技巧7:避免公用(全域)變數
    不要使用用public定義的變數。如果你是寫vbscript或在ActiveX控制項或java applet中存取變數,那麼儘可能避免公用變數。public關鍵字通常是為以後使用設計的,既然public不能給你帶來什麼好處,那最好還是用dim吧。



*技巧8:使用絕對路徑
  如果可能的話盡量避免使用相對路徑,而使用絕對路徑。使用相對路徑將需要IIS返回當前伺服器路徑,這就意味著對IIS的特殊請求造成執行速度低下。
註:慢點就慢點唄,使用相對路徑移植什麼的都方便得多呀。

*技巧9:使用"Dictionary"對象

    VBScript中提供的dictionary對象可提供快速尋找和任意帶關鍵字資料的儲存。通過dictionary對象可以根據關鍵字存取數組中的各項資料,這樣就能更快地找到在記憶體中不連續的內容(因為你是指定你正在使用的關鍵字,而不是要知道對象在數組中存放的位置)。如果你要尋找的是非線性關鍵字資料,使用dictionary對象就要快得多了。
    然而,如果關鍵字資料在記憶體中是連續的,那麼數組在尋找、儲存資料起來將更快。同時也需要注意的是在dictionary中建立索引要比在數組中慢。你應該選擇對你來說效果最好的資料結構。


*技巧10:充分利用瀏覽器的回退功能
          如果你使用的是個smart的瀏覽器,那麼他會幫你做很多的回退工作,只要用得著,不妨多用用。那麼,通過你的指令碼執行回退,當有任何錯誤發生時你可以回到前面去,並從後訪問資料庫。但要記住的是,當你訪問伺服器上存在的資料庫時就要執行一次對資料庫的操作。如果你要返回的那個表單有很多變數的話,那就有點划不來了。如果你確實知道你需要在用戶端執行很多代碼,那麼為了加快執行速度把代碼移到用戶端。當你在用戶端運行時,處理器就歸你了,伺服器呢,只好用他自身的處理能力去處理他所接到的請求。
     還有個好辦法,如果你使用的表單中用了很多伺服器端的指令碼並且有不少條件輸入,那麼最好把這些觸發反應的代碼放到用戶端指令碼引擎中去(比如vbscript,javascript)。忽略這些,伺服器代碼運行得就快了,因為對於那些不是很必要的代碼就不送到伺服器端執行了。當然這僅對那些比較小的代碼適用,至於大的嘛,就不太合適了。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。