如何增強ASP程式效能(2)
來源:互聯網
上載者:User
如何增強ASP程式效能(2)
2000-08-11· 編譯:甘冀平·Yesky
技巧6:聰明地使用Session對象
Session在繁忙網站上使用時有幾個缺陷。繁忙的意思是:網站上每秒有上百的頁面被請求,或者同時有上千的訪問使用者。這個技巧對於那些要求水平擴充強的網站非常重要,也就是指這些網站:它們利用多個伺服器完成資料裝載或者處理大量容錯。對於小型網站,比如內部網Intranet,Session是非常值得提倡的。
再次重申,ASP自動地為每一個首次點擊Web伺服器的使用者建立一個Session,每一個Session佔有大約10KB的記憶體,生存期預設是20分鐘。
使用Session最大的問題不是效能,而是擴充性,Session不能跨越多個Web伺服器,一旦在一個伺服器上建立了Session,它的資料就駐留在那裡。這意味著,如果在Web上使用Session,你就得為每一個直接存取存放Session伺服器的使用者請求設計一個策略。這就是將使用者“粘”在Web伺服器上,術語“sticky sessions”就來源於此。如果Web伺服器遇到障礙,“Stuck”使用者就會丟失他們的Session狀態,因為Session不保留在磁碟上。
執行粘性session的策略包括硬體與軟體解決方式,比如windows2000進階伺服器中的 Network Load Balancing 以及Cisco公司的Local Director,但換取這些要犧牲一定的擴充性。
Application對象也不能跨越伺服器。如果需要在Web群中共用並更新Application資料,就需要使用後台資料庫。然而,唯讀Application資料在Web群中仍然很有用。
許多對任務要求嚴格的網站都要設立至少2個Web伺服器,所以在設計嚴格任務的應用程式時,就需要執行“sticky sessions”,或者簡單地避免使用Session,同時也可以採取其他儲存使用者狀態到獨立Web伺服器的管理技術。
如果不使用Session,一定要確認將它們關閉,這可以通過Internet服務管理員實現。如果決定使用Session,可以通過幾種方法來最小化它們的影響。
可以將不需要Session的內容(比如協助畫面,訪問者地區,等等)移動到關閉Session的獨立ASP應用程式中。在基礎頁面上,可以給ASP一個指示,讓它不需要使用Session。將下面的代碼直接加入到ASP頁面的頭部:
<% @EnableSessionState=False %>
使用這個指示的一個很好的解釋是在架構結構中Session建立了一個有趣的問題。ASP確保在一個時刻只有一個來自Session的請求被執行,這就確保了如果瀏覽器為單個使用者請求多個頁面時,只有一個ASP請求在那時能夠接受Session,如此就避免了存取Session對象時的多線程問題。很不幸,在架構結構中的所有頁面將按照連續的順序顯示出來,一個接一個,而不是同時,所以使用者為了看到整個架構必須要等很長時間。規則是:如果一定的架構頁面沒有使用Session,就一定要告訴ASP直接使用@EnableSessionState=False。