亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.NET+AJAX解決網頁打開等待問題

2019-11-18 19:06:46
字體:
來源:轉載
供稿:網友
  

  提要:asp.net為相當耗時的處理提供了幾種解決方案。其中,最好的方法之一是把線程與查詢方案或Ajax技術進行結合。

  一、 前言

  人們不得不等待。事實上,用戶在操作計算機時,如果等待時間超過大約200毫秒,他們一般都感到厭煩。當你的基于萬維網的應用程序使用一個需要耗費許多秒甚至幾分鐘的進程時,這可能成為一個問題。顯然,你不可能僅通過建立一個進度條對話框或一等待光標就算萬事大吉。

  幸好,ASP.NET為此提供了一些不同的解決方案來處理這種相當耗時的進程-具體情況要依賴于要求的交互級別和你愿意處理的復雜程度。本文首先通過一個示例應用程序來說明這個問題并且通過兩種方案來運行:一種使用了簡單查詢技術,而另一種使用一種更高級的AJAX解決方案。

  千萬警惕,在.NET框架中已發現存在一些錯誤的方式。其中之一就是IAsyncHTTPHandler-乍看來,它似乎有助于較長網頁的請求。然而,這個異步HTTP處理器卻是被設計用來釋放處理器的-盡管,此時在一頁面之上的某些任務需耗費一些時間但是并不需要任何CPU。一個好的例子就是在一頁面的中間發出Web請求。在這種情況中,異步HTTP處理器是很有效率的。

  二、 問題

  在本文中,我要討論一個不同的問題。在本示例應用程序中,我創建了一個頁面-它用于為五個不同的機場報告當前的溫度、風級和另外一些天氣信息。Web服務要花費大約五秒鐘來取得每一項數據。因此,如果我讓該頁面如圖1所示運行,那么在服務器返回一頁面前要花費大約一分鐘-這對于任何用戶都是無法接受的等待時間。


圖1.等待:最開始的示例應用程序大約需要一分鐘來加載頁面。
  這個相當耗時的頁面相應的HTML顯示于列表1中(詳見下載源代碼)。
  頁面裝載事件代碼為數據格子創建一個數據集。然后,迅速處理多個機場并且調用該web服務以得到數據。然后,該方法把數據從web服務填充到該數據集并且把它依附于一個格子控件(見圖2)。

圖2.基本的:該示例應用程序的Web服務執行一簡單的天氣狀況查詢。
 這個web服務的WSDL是http://www.capeclear.com/AirportWeather.wsdl。它定義了許多不同的方法,我將僅使用其中的一個getSummary方法-它返回一個包括機場的位置、天空條件、風速、可見性甚至更多的數據塊。
  用這種方式,即使單個服務器請求也要比單個頁面取回消耗更多的時間。另外一種選擇是讓一個線程運行于后臺來取得數據,而由前端頁面連續地監視該線程的輸出。
  三、 線程解決方案
  線程解決方案提供給用戶一種更為干凈的體驗-因為它們可以周期性地得到處理的更新。這里的響應是很容易準備的,盡管在后臺的處理可能花一些時間,但是作為響應卻可以馬上返回。
  為處理此線程系統,我將使用兩個類和一個接口。JobHandler singleton負責維持一個對象集合-它實現IJob接口。這個JobHandler管理系統線程。每添加一個工作創建一個新線程,并且該工作上的Start方法在一個新線程內被調用。一個被用于后面查詢工作的ID字符串被返回。
  該Job系統相應的UML顯示于圖3。

圖3.這個屏幕快照顯示出該Job系統相應的UML。
   WeatherJob是一個Ijob的實現-它負責從機場中的一個指定集合進行天氣查詢并且填充一個稱作Data的包含天氣報告的DataSet。
  該JobHandler singleton相應的代碼顯示于列表2(詳見下載源代碼)-相當直接。唯一有趣的一點是AddJob方法,它為該工作創建一個新的線程并調用Start方法。
 這些工作的接口顯示于列表3(詳見下載源代碼)。其中的構造器為該工作建立數據集合。而且Start方法,通過每個機場,調用WEB請求并且在該數據集合中存儲返回的數據。
   四、 查詢解決方案
  監視天氣工作的第一種解決方案是使用查詢。為此,頁面將每隔兩秒向它自己回寄數據。請求工作在第一個頁面中就開始了。此后,該頁面將通過鉤住工作的數據輸送到頁面中的數據格子來監視天氣工作的輸出。瀏覽器、WEB服務器以及線程之間的關系顯示于圖4。

圖4.查詢:查詢HTML解決方案顯示了瀏覽器、WEB服務器以及線程之間的關系。
  針對該查詢頁面的HTML顯示于列表4中(詳見下載源代碼)。其中,有趣的部分是在標簽refreshScript內部的腳本塊。當標簽是可見的時,將執行該腳本以在頁面加載兩秒后重新提交表單-這將更新在格子中的數據。
  該查詢HTML背后的代碼顯示于列表5(詳見下載源代碼)。這里的重要代碼是位于page_load方法中。如果存儲在隱藏的表格字段中的請求ID是null或blank,則這是第一次加載頁面。在第一次加載頁面時,創建該工作并且該工作的ID被放置于隱藏的表單域中。
  在兩秒以后,該javascript將被激發而該頁面將重加載。請求ID將第二次接近該隱藏的輸入字段并且該代碼將用指定的ID發現該工作并且使用該數據來填充數據格子。
  五、 AJAX解決方案
  在Internet Explorer中的頁面重載會在頁面變成一片空白并等待重載之時造成一次聽得見的鼠標擊鍵和一次屏幕閃動。如果它每隔兩秒發生一次,這可能相當煩人。AJAX提供了一種選擇-只有一個頁面加載并且頁面中的Javascript請求每隔500毫秒請求狀態時,才動態地更新頁面(見圖5)。

圖5.AJAX解決方案:Javascript每500毫秒更新后臺的頁面數據。
  該AJAX頁面的HTML部分顯示于列表6(詳見下載源碼),其中的大多數代碼是Javascript。該Javascript首先激活addField調用-它增加從服務器中以xml形式返回的不同字段。這個startup頁面開始第一次到服務器的請求。getData通過調用createHTTPRequest開始一個請求。這個函數通過具有跨平臺的代碼來構建HTTP請求對象。
  該HTTP請求是異步的。在請求完成時,調用handleResponse函數-該函數分析XML并且為該數據表格創建一些新的HTML-這個HTML將被放置到"grid"<div>標簽中。
  該頁面背后的代碼顯示于列表7。代碼中的page_load啟動該工作,然后用數據請求頁面的URL設置隱藏的輸入字段。
  這個get_data.aspx頁面使用一個請求ID并且返回一個當前數據集合的XML描述。該頁面代碼顯示于下:
//get_data.aspx
<%@ Page language="c#" Codebehind="get_data.aspx.cs"
AutoEventWireup="false" Inherits="background.get_data" %>
  顯然,在這種情況下后臺的代碼更為重要。該代碼顯示于列表8中(詳見下載源碼),-它首先把響應的內容類型設置為"text/xml"。如果在瀏覽器中不存在該AJAX代碼,那么就不會從響應中生成一個XML文檔。此后,代碼得到請求并且要求DataSet生成該XML。然后它稍微改變一下該XML響應來添加"done"字段-這個用于告訴客戶請求是否已完成。
  在該頁面第一次啟動時,它看上去如圖6的樣子。

圖6.仍是查詢:這個屏幕快照顯示出仍處于查詢中的AJAX頁面。

  當請求完成時,該瀏覽器將看起來如圖7所示。在用AJAX解決方案時,請記住,在創建代碼時,你是在設置最小的瀏覽器要求-并不是所有的瀏覽器都能創建一HTTP請求。事實上,只是最近的瀏覽器才能實現它。理想情況下,你的解決方案應該既為更舊的瀏覽器提供查詢版本支持也為新型瀏覽器提供一個AJAX版本支持。


圖7.完成:這個屏幕快照顯示出完成后的AJAX頁面。

  六、 小結

  在最有利的情況下,線程也可能存在問題。而在這種情況下,線程可能比平常更難于監控-因為它運行于服務器的后臺。當然,即使沒有Web客戶在監控它,請求仍有可能將繼續保持運行。如果這會是一個問題,那么你應該讓WEB監控代碼用線程化的過程設置一個時間戳。如果該線程化過程發現一段時間后自己還沒有被觀看,那么它就可以取消自己。

  在.NET中有幾種方法可以實現后臺處理,而本文的線程方法僅是其中的一種。你也可以用ASP.NET緩存工作,或甚至創建一個真正的后臺處理進程。

  通過使用這些不同的技術,你就完全可以把相當耗時的處理等待轉變成一種有關過程處理的豐富的回饋式用戶體驗。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲日韩欧美视频一区| 97超级碰碰碰| 精品精品国产国产自在线| 国产精品久久久久aaaa九色| 国产黑人绿帽在线第一区| 国产精品久久久久久久app| 日韩av中文字幕在线播放| 日韩国产精品亚洲а∨天堂免| 欧洲亚洲妇女av| 日本亚洲欧美成人| 精品视频www| 欧美日韩激情视频8区| 国产精品精品视频| 国产在线精品播放| 亚洲第一级黄色片| 欧美高清电影在线看| 在线免费观看羞羞视频一区二区| 中文字幕精品久久久久| 久久精品亚洲精品| 日韩欧美在线字幕| 欧美交受高潮1| 亚洲成人999| 成人av电影天堂| 成人精品视频久久久久| 亚洲自拍偷拍区| 自拍偷拍亚洲在线| 韩国三级电影久久久久久| 5566成人精品视频免费| 98午夜经典影视| 日韩av免费看| 欧美极品xxxx| 日本老师69xxx| 久久久久久噜噜噜久久久精品| 久久免费精品日本久久中文字幕| 亲爱的老师9免费观看全集电视剧| 国产91精品网站| 国产丝袜一区二区三区| 免费不卡欧美自拍视频| 欧美国产日韩一区二区三区| 69av在线视频| 国产性猛交xxxx免费看久久| 国产精品一区=区| 国产精品丝袜一区二区三区| 色樱桃影院亚洲精品影院| 992tv在线成人免费观看| 国产精品va在线| 欧美激情久久久| 精品国产户外野外| 欧美激情亚洲一区| 草民午夜欧美限制a级福利片| 欧美人与物videos| 亚洲免费视频网站| 成人午夜在线影院| 欧美中文字幕在线播放| 国产又爽又黄的激情精品视频| 欧洲精品久久久| 超薄丝袜一区二区| 丁香五六月婷婷久久激情| 国产精品xxxxx| 亚洲理论电影网| 亚洲精品资源美女情侣酒店| 欧美激情亚洲国产| 日韩中文字幕第一页| 国产欧美日韩精品专区| 国产精品美乳在线观看| 自拍偷拍亚洲区| 懂色aⅴ精品一区二区三区蜜月| 欧美最猛性xxxx| 亚洲精品xxx| 国产亚洲精品一区二555| 亚洲性视频网站| 日韩精品极品在线观看播放免费视频| 国产欧美精品一区二区三区-老狼| 日韩av片电影专区| 亚洲女人天堂网| 中文字幕亚洲第一| 欧美视频在线观看 亚洲欧| 亚洲日本成人网| 亚洲欧洲在线视频| 日韩最新在线视频| 日本午夜精品理论片a级appf发布| 正在播放欧美一区| 性欧美激情精品| 亚洲精品中文字幕av| 久久国产精品久久久| 欧美亚洲免费电影| 久久久精品亚洲| 青青久久aⅴ北条麻妃| 深夜福利国产精品| 91亚洲精品久久久| 亚洲欧美日韩直播| 欧美成人网在线| 91免费人成网站在线观看18| 日韩欧美在线免费观看| 爱福利视频一区| 日韩欧美亚洲国产一区| 国内精品久久久久影院 日本资源| 亚洲精品小视频在线观看| 91精品国产综合久久香蕉| 日本韩国在线不卡| 日本亚洲精品在线观看| 精品中文字幕乱| 亚洲毛片在线观看.| 久久久亚洲国产天美传媒修理工| 久久这里只有精品视频首页| 国产女精品视频网站免费| 九九九热精品免费视频观看网站| 国产精品久久久久久久久久久不卡| 亚洲人午夜色婷婷| 国产成人精品久久二区二区91| 久久中文字幕在线视频| 91精品国产91久久久久久吃药| 亚洲国产另类久久精品| 大胆欧美人体视频| 自拍偷拍亚洲区| 国产成人97精品免费看片| 国产三级精品网站| 亚洲国产欧美在线成人app| 欧洲午夜精品久久久| 黑人极品videos精品欧美裸| 国产精品久久不能| 亚洲精品之草原avav久久| 欧美日韩免费区域视频在线观看| 日韩在线观看免费高清| 亚洲电影在线看| 亚洲免费人成在线视频观看| 日韩欧美国产高清91| 亚洲高清一二三区| 色偷偷噜噜噜亚洲男人的天堂| 最近2019中文免费高清视频观看www99| 成人在线中文字幕| 欧美性猛交99久久久久99按摩| 九九精品视频在线观看| 国产欧美日韩免费看aⅴ视频| 日韩在线视频观看| 国产精选久久久久久| 亚洲欧洲在线播放| www日韩中文字幕在线看| 欧美精品生活片| 1769国产精品| 久久精品成人动漫| 欧美最猛黑人xxxx黑人猛叫黄| 久久av在线看| 夜夜嗨av一区二区三区免费区| 亚洲精品美女在线观看播放| 欧美第一页在线| 亚洲毛片在线观看.| 青青精品视频播放| 在线中文字幕日韩| 久久精品91久久久久久再现| 亚洲美腿欧美激情另类| 久99九色视频在线观看| 国产综合在线看| 欧美成人免费一级人片100| 欧美精品激情blacked18| 亚洲第一精品夜夜躁人人躁| 精品国产乱码久久久久酒店| 国产精品久久久久久久av电影| 九九热精品视频在线播放| 日韩av在线导航| 成人性教育视频在线观看| 国产精品一区二区性色av| 亚洲成人网久久久| 欧美大片va欧美在线播放|