避免到服务器的不必要的往返过程
通常,只有在檢索或存儲(chǔ)數(shù)據(jù)時(shí),您才需要啟動(dòng)到服務(wù)器的往返過(guò)程。多數(shù)數(shù)據(jù)操作可在這些往返過(guò)程間的客戶端上進(jìn)行。例如,從 HTML 窗體驗(yàn)證用戶輸入經(jīng)常可在數(shù)據(jù)提交到服務(wù)器之前在客戶端進(jìn)行。通常,如果不需要將信息傳遞到服務(wù)器以將其存儲(chǔ)在數(shù)據(jù)庫(kù)中,那么您不應(yīng)該編寫(xiě)導(dǎo)致往返過(guò)程的代碼。
如果您開(kāi)發(fā)自定義服務(wù)器控件,請(qǐng)考慮讓它們?yōu)橹С?ECMAScript 的瀏覽器呈現(xiàn)客戶端代碼。通過(guò)以這種方式使用服務(wù)器控件,您可以顯著地減少信息被不必要的發(fā)送到 Web 服務(wù)器的次數(shù)。
使用 Page.IsPostBack 避免對(duì)往返過(guò)程執(zhí)行不必要的處理
如果您編寫(xiě)處理服務(wù)器控件回發(fā)處理的代碼,有時(shí)可能需要在首次請(qǐng)求頁(yè)時(shí)執(zhí)行其他代碼,而不是當(dāng)用戶發(fā)送包含在該頁(yè)中的 HTML 窗體時(shí)執(zhí)行的代碼。根據(jù)該頁(yè)是否是響應(yīng)服務(wù)器控件事件生成的,使用 Page.IsPostBack 屬性有條件地執(zhí)行代碼。例如,下面的代碼演示如何創(chuàng)建數(shù)據(jù)庫(kù)連接和命令,該命令在首次請(qǐng)求該頁(yè)時(shí)將數(shù)據(jù)綁定到 DataGrid 服務(wù)器控件。
[Visual Basic]
Sub Page_Load(sender As Object, e As EventArgs)
' Set up a connection and command here.
If Not (Page.IsPostBack)
Dim query As String = "select * from Authors where FirstName like '%JUSTIN%'"
myCommand.Fill(ds, "Authors")
myDataGrid.DataBind()
End If
End Sub
[C#]
void Page_Load(Object sender, EventArgs e) {
// Set up a connection and command here.
if (!Page.IsPostBack) {
String query = "select * from Authors where FirstName like '%JUSTIN%'";
myCommand.Fill(ds, "Authors");
myDataGrid.DataBind();
}
}
由于每次請(qǐng)求時(shí)都執(zhí)行 Page_Load 事件,上述代碼檢查 IsPostBack 屬性是否設(shè)置為 false。如果是,則執(zhí)行代碼。如果該屬性設(shè)置為 true,則不執(zhí)行代碼。
注意 如果不運(yùn)行這種檢查,回發(fā)頁(yè)的行為將不更改。Page_Load 事件的代碼在執(zhí)行服務(wù)器控件事件之前執(zhí)行,但只有服務(wù)器控件事件的結(jié)果才可能在輸出頁(yè)上呈現(xiàn)。如果不運(yùn)行該檢查,仍將為 Page_Load 事件和該頁(yè)上的任何服務(wù)器控件事件執(zhí)行處理。
總結(jié)
以上是生活随笔為你收集整理的避免到服务器的不必要的往返过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 当不使用会话状态时禁用它
- 下一篇: 只在必要时保存服务器控件视图状态