版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/qq1010885678/article/details/37543103
通過檢視asp.net的整個生命周期之後
了解到在aspx的頁面生命周期中
調用了BuildControlTree()方法生成頁面控件樹
之後再調用Rend()方法根據控件樹生成html傳回
aspx頁面上有3種控件類型
1.html标簽,在伺服器端被當作字元串,不做特殊處理
2.runat="server"标簽,那麼在網站編譯程式集的時候,該頁面的背景類會自動建立一個Protect
修飾的伺服器控件類對象(如:protected HtmlGenericControl divMsg;)
正是因為protect,在背景類中可以通路,在其子類前台類中也可以通路(注意:這個控件變量中有一
個Render方法專門根據該控件的屬性來生成對應的html字元串)
例子:
protected HtmlGenericControl divMsg;
protected HtmlForm form1;
protected HtmlImage imgs;
protected HtmlGenericControl spanMsg;
protected string strName;
protected HtmlInputText txtName;
HtmlGenericControl主要對應非表單控件的标簽
3.ASP伺服器控件<ASP:Button>,此種控件必須放在runat=server的form中。伺服器專屬控件
與第二種控件的差別:runat="server"控件在背景通路時,其屬性等都和html标簽一樣通路,
而ASP伺服器控件在後天通路屬性時像winform的控件一樣通路,如:
1.背景是string(添加到控件樹時時LiteralControl)類
2.runat="server"控件在背景生成的變量是HtmlForm等這些類
3.ASP伺服器控件背景生成的是Button等這些類
根據不同的控件類型
将在生命周期中對應着不同的處理方式
這就是為什麼伺服器端的控件響應速度慢,html代碼被當做字元串不做特殊處理原樣傳回當然比要經過一系列轉換和生成的伺服器控件響應速度快呀~
aspx的頁面狀況:
1.當頁面上沒有包含任何伺服器端語言的時候(<%%>、 runat="server"),整個頁面作為 文本
資源供程式集使用。
2.當頁面中包含 <%%>和html代碼字元串時,目前前台頁面類裡會自動生成一個 方法,這個方法
中 向一個寫出器對象裡 吸入頁面的html代碼,和執行 <%%>内的内容。
3.當頁面中既包含<%%>、html代碼字元、runat=server的html、伺服器控件标簽時,那麼前台頁
面類會為每個runatserver的控件都建立一個方法,并通過 buildControlTree方法來組織各個控
件的依賴(包含)關系
Asp編譯過程:
Client->Server->.Net Framework->判斷記憶體中是否有相應的機器碼->有,則交給cup執行傳回給上一層,沒有,則判斷c盤中是否有相應的中間代碼檔案->有,則交給jit編譯生成機器碼傳回給上一層并存在記憶體中,沒有則将對應的aspx檔案和aspx.cs合并用中間語言編譯成一個類傳回給上一層并存在C槽中
如下圖所示: