淺析ASP.NET異步頁(yè)面
ASP.NET異步頁(yè)面與ajax異步的效果區(qū)別:
1:ASP.NET的異步頁(yè)面讓我***想法是和ajax效果比較,ajax應(yīng)用在比較費(fèi)時(shí)的方法上,當(dāng)數(shù)據(jù)加載時(shí),在頁(yè)面顯示數(shù)據(jù)的區(qū)域先用一段提示文字,例如:數(shù)據(jù)正在加載中...之類的,無(wú)論這個(gè)方法多么費(fèi)時(shí),它只影響這一塊的數(shù)據(jù)顯示,頁(yè)面其它區(qū)域不受影響(如果速度不慢的話)。而ASP.NET異步頁(yè)面并不能達(dá)到這種效果,從上面的異步執(zhí)行流程圖可以看出,異步調(diào)用的事件發(fā)生在onprerendercomplete中,就是說(shuō)在頁(yè)面中生命周期之內(nèi),頁(yè)面要想完全呈現(xiàn)給用戶,必須等待異步方法返回結(jié)果。例如,一個(gè)費(fèi)時(shí)的異步io方法,需要費(fèi)時(shí)10s,那么用戶要想看到頁(yè)面,起碼在10s以上。
2:ASP.NET異步頁(yè)面增加的是處理請(qǐng)求的數(shù)量,線程池線程得到了高效的使用,提高了可伸縮性,而ajax是在頁(yè)面加載完成之后根據(jù)返回結(jié)果調(diào)用回調(diào)函數(shù)操作dom完成數(shù)據(jù)加載。
異步任務(wù):
ASP.NET 2.0 中引入了另一個(gè)方法來(lái)簡(jiǎn)化異步操作: registerasynctask,比 addonprerendercompleteasync 具有以下優(yōu)勢(shì)。
1:除了 begin 和 end 方法,registerasynctask 允許注冊(cè)當(dāng)異步操作長(zhǎng)時(shí)間無(wú)法完成時(shí)調(diào)用的超時(shí)方法。設(shè)置 @ page 指令中 asynctimeout 屬性設(shè)置超時(shí)。
2:可以在一個(gè)請(qǐng)求中多次調(diào)用 registerasynctask 來(lái)注冊(cè)若干異步操作。
3:可以使用 registerasynctask 的第四個(gè)參數(shù)將狀態(tài)傳遞給 begin 方法。這個(gè)參數(shù)一般設(shè)置為null。
registerasynctask 的異步頁(yè)與依賴于 addonprerendercompleteasync 的異步頁(yè)相類似。需要將該頁(yè)的 asyncmode 屬性設(shè)置為 true,且與通過(guò) prerender 事件執(zhí)行,此時(shí)調(diào)用使用 registerasynctask 注冊(cè)的 begin 方法,而不是addonprerendercompleteasync ,而且進(jìn)一步保持請(qǐng)求處理直到***一個(gè)操作完成。
總結(jié):
正確的使用好asp.net異步頁(yè)面在某些環(huán)境下能夠使得應(yīng)用程序性能得到優(yōu)化。
【編輯推薦】