婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > AJAX 客戶端響應速度提高分析

AJAX 客戶端響應速度提高分析

熱門標簽:接聽電話機器人哪有 蓄意標記地圖標注 察縣地圖標注 信貸電銷機器人有用嗎 如何用地圖標注各分公司 電銷機器人適用范圍 廣西ai語音電銷機器人哪家好 辦理一個400電話多少錢 莆田防封電銷卡價格
理論上AJAX技術在很大的程度上可以減少用戶操作的等待時間,同時節約網絡上的數據流量。而然,實際情況卻并不總是這樣。用戶時常會抱怨用了AJAX的系統響應速度反而降低了。
  筆者從事AJAX方面的研發多年,參與開發了目前國內較為成熟的AJAX平臺-dorado。根據筆者的經驗,導致這種結果的根本原因并不在AJAX。很多時候系統響應速度的降低都是由不夠合理的界面設計和不夠高效的編程習慣造成的。下面我們就來分析幾個AJAX開發過程中需要時刻注意的環節。
  合理的使用客戶端編程和遠程過程調用
  客戶端的編程主要都是基于JavaScript的。而JavaScript是一種解釋型的編程語言,它的運行效率相對于Java等都要稍遜一籌。同時JavaScript又是運行在瀏覽器這樣一個嚴格受限的環境當中。因此開發人員對于哪些邏輯可以在客戶端執行應該有一個清醒的認識。
  在實際的應用中究竟應該怎樣使用客戶端編程,這依賴于開發人員的經驗判斷。這里很多問題是只可意會的。由于篇幅有限,在這里我們大致歸納出下面這幾個注意事項:
  盡可能避免頻繁的使用遠程過程調用,例如避免在循環體中使用遠程過程調用。
  如果可能的話盡可能使用AJAX方式的遠程過程調用(異步方式的遠程過程調用)。
  避免將重量級的數據操作放置在客戶端。例如:大批量的數據復制操作、需要通過大量的數據遍歷完成的計算等。
  改進對DOM對象的操作方式。
  客戶端的編程中,對DOM對象的操作往往是最容易占用CPU時間的。而對于DOM對象的操作,不同的編程方法之間的性能差異又往往是非常大的。
  以下是三段運行結果完全相同的代碼,它們的作用是在網頁中創建一個10x1000的表格。然而它們的運行速度卻有著天壤之別。
復制代碼 代碼如下:

/* 測試代碼1 - 耗時: 41秒*/
var table = document.createElement("TABLE");
document.body.appendChild(table);
for(var i = 0; i 1000; i++){
var row = table.insertRow(-1);
for(var j = 0; j 10; j++){
var cell = objRow.insertCell(-1);
cell.innerText = "( " + i + " , " + j + " )";
}
}
/* 測試代碼2 - 耗時: 7.6秒 */
var table = document.getElementById("TABLE");
document.body.appendChild(table);
var tbody = document.createElement("TBODY");
table.appendChild(tbody);
for(var i = 0; i 1000; i++){
var row = document.createElement("TR");
tbody.appendChild(row);
for(var j = 0; j 10; j++){
var cell = document.createElement("TD");
row.appendChild(cell);
cell.innerText = "( " + i + " , " + j + " )";
}
}
/* 測試代碼3 - 耗時: 1.26秒 */
var tbody = document.createElement("TBODY");
for(var i = 0; i 1000; i++){
var row = document.createElement("TR");
for(var j = 0; j 10; j++){
var cell = document.createElement("TD");
cell.innerText = "( " + i + " , " + j + " )";
row.appendChild(cell);
}
tbody.appendChild(row);
}
var table = document.getElementById("TABLE");
table.appendChild(tbody);
document.body.appendChild(table);

  這里的“測試代碼1”和“測試代碼2”之間的差別在于在創建表格單元時使用了不同的API方法。而“測試代碼2”和“測試代碼3” 之間的差別在于處理順序的略微不同。
  “測試代碼1”和“測試代碼2”之間如此大的性能差別我們無從分析,目前所知的是insertRow和insertCell是DHTML中表格特有的 API,createElement和appendChild是W3C DOM的原生API。而前者應該是對后者的封裝。不過,我們并不能因此而得出結論認為DOM的原生API總是優于對象特有的API。建議大家在需要頻繁調用某一API時,對其性能表現做一些基本的測試。
  “測試代碼2”和“測試代碼3”之間的性能差異主要來自于他們的構建順序不同。“測試代碼2”的做法是首先創建最外層的TABLE>對象,然后再在循環中依次創建TR>和TD>。而“測試代碼3”的做法是首先在內存中由內到外的構建好整個表格,最后再將它添加到網頁中。這樣做的目的是盡可能的減少瀏覽器重新計算頁面布局的次數。每當我們將一個對象添加到網頁中時,瀏覽器都會嘗試對頁面中的控件的布局進行重新計算。所以,如果我們能夠首先在內存中將整個要構造的對象全部創建好,然后再一次性的添加到網頁中。那么,瀏覽器將只會做一次布局的重計算。總結為一句話那就是越晚執行appendChild越好。有時為了提高運行效率,我們甚至可以考慮先使用 removeChild將已存在的控件從頁面中移除,然后構造完成后再重新將其放置回頁面當中。
  提高字符串累加的速度
  在使用AJAX提交信息時,我可能常常需要拼裝一些比較大的字符串通過XmlHttp來完成POST提交。盡管提交這樣大的信息的做法看起來并不優雅,但有時我們可能不得不面對這樣的需求。那么JavaScript中對字符串的累加速度如何呢?我們先來做下面的這個實驗。累加一個長度為30000的字符串。
復制代碼 代碼如下:

/* 測試代碼1 - 耗時: 14.325秒 */
var str = "";
for (var i = 0; i 50000; i++) {
str += "xxxxxx";
}

  這段代碼耗時14.325秒,結果并不理想。現在我們將代碼改為如下的形式:
復制代碼 代碼如下:

/* 測試代碼2 - 耗時: 0.359秒 */
var str = "";
for (var i = 0; i 100; i++) {
var sub = "";
for (var j = 0; j 500; j++) {
sub += "xxxxxx";
}
str += sub;
}

  這段代碼耗時0.359秒!同樣的結果,我們做的只是首先拼裝一些較小的字符串然后再組裝成更大的字符串。這種做法可以有效的在字符串拼裝的后期減小內存復制的數據量。知道了這一原理之后我們還可以把上面的代碼進一步拆散以后進行測試。下面的代碼僅耗時0.140秒。
復制代碼 代碼如下:

/* 測試代碼3 - 耗時: 0.140秒 */
var str = "";
for (var i1 = 0; i1 5; i1++) {
var str1 = "";
for (var i2 = 0; i2 10; i2++) {
var str2 = "";
for (var i3 = 0; i3 10; i3++) {
var str3 = "";
for (var i4 = 0; i4 10; i4++) {
var str4 = "";
for (var i5 = 0; i5 10; i5++) {
str4 += "xxxxxx";
}
str3 += str4;
}
str2 += str3;
}
str1 += str2;
}
str += str1;
}

  不過,上面這種做法也許并不是最好的!如果我們需要提交的信息是XML格式的(其實絕大多數情況下,我們都可以設法將要提交的信息組裝成XML格式),我們還能找到更高效更優雅的方法—利用DOM對象為我們組裝字符串。下面這段代買組裝一個長度為950015的字符串僅須耗時0.890秒。
復制代碼 代碼如下:

/* 利用DOM對象組裝信息 - 耗時: 0.890秒 */
var xmlDoc;
if (browserType == BROWSER_IE) {
xmlDoc = new ActiveXObject("Msxml.DOMDocument");
}
else {
xmlDoc = document.createElement("DOM");
}
var root = xmlDoc.createElement("root");
for (var i = 0; i 50000; i++) {
var node = xmlDoc.createElement("data");
if (browserType == BROWSER_IE) {
node.text = "xxxxxx";
}
else {
node.innerText = "xxxxxx";
}
root.appendChild(node);
}
xmlDoc.appendChild(root);
var str;
if (browserType == BROWSER_IE) {
str = xmlDoc.xml;
}
else {
str = xmlDoc.innerHTML;
}

  避免DOM對象的內存泄漏
  關于IE中DOM對象的內存泄露是一個常常被開發人員忽略的問題。然而它帶來的后果卻是非常嚴重的!它會導致IE的內存占用量持續上升,并且瀏覽器的整體運行速度明顯下降。對于一些泄露比較嚴重的網頁,甚至只要刷新幾次,運行速度就會降低一倍。
  比較常見的內存泄漏的模型有“循環引用模型”、“閉包函數模型”和“DOM插入順序模型”,對于前兩種泄漏模型,我們都可以通過在網頁析構時解除引用的方式來避免。而對于“DOM插入順序模型”則需要通過改變一些慣有的編程習慣的方式來避免。
  有關內存泄漏的模型的更多介紹可以通過Google很快的查到,本文不做過多的闡述。不過,這里我向您推薦一個可用于查找和分析網頁內存泄露的小工具——Drip,目前的較新版本是0.5,下載地址是http://outofhanwell.com/ieleak/index.php。
  復雜頁面的分段裝載和初始化
  對系統當中某些確實比較復雜而又不便使用IFrame的界面,我們可以對其實施分段裝載。例如對于多頁標簽的界面,我們可以首先下載和初始化多頁標簽的默認頁,然后利用AJAH(asynchronous JavaScript and HTML)技術來異步的裝載其他標簽頁中的內容。這樣就能保證界面可以在第一時間首先展現給用戶。把整個復雜界面的裝載過程分散到用戶的操作過程當中。
  利用GZIP壓縮網絡流量
  除了上面提到的這些代碼級的改良之外,我們還可以利用GZIP來有效的降低網絡流量。目前常見的主流瀏覽器已經全部支持GZIP算法,我們往往只需要編寫少量的代碼就可以支持GZIP了。例如在J2EE中我們可以在Filter中通過下面的代碼來判斷客戶端瀏覽器是否支持GZIP算法,然后根據需要利用 java.util.zip.GZIPOutputStream來實現GZIP的輸出。
復制代碼 代碼如下:

/* 判斷瀏覽器對GZIP支持方式的代碼 */
private static String getGZIPEncoding(HttpServletRequest request) {
String acceptEncoding = request.getHeader("Accept-Encoding");
if (acceptEncoding == null) return null;
acceptEncoding = acceptEncoding.toLowerCase();
if (acceptEncoding.indexOf("x-gzip") >= 0) return "x-gzip";
if (acceptEncoding.indexOf("gzip") >= 0) return "gzip";
return null;
}

  一般而言,GZIP對于HTML、JSP的壓縮比可以達到80%左右,而它造成的服務端和客戶端的性能損耗幾乎是可以忽略的。結合其他因素,支持GZIP 的網站有可能為我們節約50%的網絡流量。因此GZIP的使用可以為那些網絡環境不是特別好的應用帶來顯著的性能提升。使用Http的監視工具Fiddler可以方便的檢測出網頁在使用GZIP前后的通訊數據量。(Fiddler的下載地址是http://www.fiddlertool.com/fiddler/)
  關于Web應用的性能優化其實是一個非常大的話題。本文由于篇幅有限,只能涉及其中的幾個細節,并且也無法將這些細節的優化方式全面的展現給大家。期望本文能夠引起大家對Web應用尤其是客戶端性能優化的充分重視。畢竟服務端編程技巧已為大家熟知多年,在服務端挖掘性能的潛力已經不大了。而在客戶端的方法改進往往能夠得到令人驚奇的性能提升。
您可能感興趣的文章:
  • Js中使用hasOwnProperty方法檢索ajax響應對象的例子
  • thinkphp中ajax與php響應過程詳解
  • ajax與302響應代碼測試
  • jQuery的Ajax時無響應數據的解決方法
  • Ajax獲取響應內容長度的方法

標簽:益陽 張掖 延邊 平涼 儋州 銅陵 鷹潭 阿拉善盟

巨人網絡通訊聲明:本文標題《AJAX 客戶端響應速度提高分析》,本文關鍵詞  AJAX,客戶端,響應,速度,提高,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《AJAX 客戶端響應速度提高分析》相關的同類信息!
  • 本頁收集關于AJAX 客戶端響應速度提高分析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品国产a| 91在线观看污| 91年精品国产| 风间由美一区二区三区在线观看| 亚洲精品成人在线| 依依成人综合视频| 亚洲乱码国产乱码精品精小说| 国产精品女同一区二区三区| 久久久国产精华| wwwwxxxxx欧美| 国产综合久久久久久鬼色 | 国产精品视频一二三区| 国产在线不卡一区| 久久久久高清精品| av电影在线观看一区| 国产精品无圣光一区二区| 国产成人自拍网| 欧美激情中文不卡| 丁香婷婷深情五月亚洲| 国产精品久久久久久久久晋中| 99re热这里只有精品免费视频| 国产精品成人一区二区艾草| 成人开心网精品视频| 一区二区三区国产| 日韩精品一区二区三区视频播放| 国产精品综合一区二区三区| 国产精品美日韩| 欧美日韩国产不卡| 国产精一区二区三区| 亚洲卡通欧美制服中文| 日韩精品一区二区三区在线观看| 成人av小说网| 美日韩一区二区| 亚洲欧洲日韩av| 91精品国产一区二区三区蜜臀| 成人福利在线看| 人人狠狠综合久久亚洲| 综合色天天鬼久久鬼色| 日韩欧美激情一区| 日本久久一区二区三区| 国产iv一区二区三区| 日韩va亚洲va欧美va久久| **欧美大码日韩| www一区二区| 欧美三级在线播放| 91在线一区二区三区| 国内偷窥港台综合视频在线播放| 香蕉成人啪国产精品视频综合网| 亚洲国产精品ⅴa在线观看| 日韩欧美成人一区二区| 欧美精品乱人伦久久久久久| av中文字幕亚洲| 国产aⅴ综合色| 日本中文在线一区| 亚洲精品国产成人久久av盗摄 | 亚洲精品五月天| 欧美大片日本大片免费观看| 欧美在线free| 91在线视频18| 成人av电影观看| 一区二区三区国产| 亚洲国产精品嫩草影院| 日本韩国一区二区| 免费成人在线观看| 亚洲永久精品大片| 国产精品成人免费在线| 久久精品人人做| 欧美精品一区二区高清在线观看| 欧美亚洲动漫制服丝袜| 91视频在线观看| 色哟哟亚洲精品| 99国产欧美另类久久久精品| 成人福利在线看| av一二三不卡影片| 波多野洁衣一区| 99视频一区二区| 91亚洲男人天堂| 91黄色在线观看| 欧美三级电影在线看| 欧美日韩在线播放一区| 717成人午夜免费福利电影| 911精品国产一区二区在线| 日韩视频一区二区在线观看| 久久夜色精品国产噜噜av | 亚洲免费观看在线观看| 一区二区三区在线免费观看| 亚洲激情在线激情| 亚洲精品中文在线| 日韩国产高清影视| 精品一区二区三区免费毛片爱| 国产大陆亚洲精品国产| 成人av网在线| 欧美伊人精品成人久久综合97| 欧美日韩国产电影| 精品国产青草久久久久福利| 国产精品女人毛片| 亚洲一区二区三区四区不卡| 26uuu国产一区二区三区| 国产精品久久久久四虎| 日韩 欧美一区二区三区| 成人99免费视频| 欧美日韩国产电影| 亚洲国产精品黑人久久久| 亚洲一区二区三区四区在线观看| 久久成人免费网| 91黄色小视频| 久久久激情视频| 天堂久久一区二区三区| 成人毛片视频在线观看| 欧美一区二区三区男人的天堂| 欧美韩日一区二区三区| 午夜欧美在线一二页| 高清在线观看日韩| 欧美剧情片在线观看| 亚洲欧美怡红院| 久久91精品国产91久久小草 | 日韩欧美国产三级电影视频| 国产婷婷一区二区| 舔着乳尖日韩一区| 99v久久综合狠狠综合久久| 欧美一级xxx| 亚洲愉拍自拍另类高清精品| 成人午夜在线播放| 欧美成人精品二区三区99精品| 亚洲成人黄色影院| jiyouzz国产精品久久| 久久精品一区二区| 美女在线一区二区| 7777精品伊人久久久大香线蕉经典版下载| 国产精品对白交换视频| 国产一区视频网站| 精品国产一区二区三区av性色| 亚洲国产精品麻豆| 色综合一个色综合亚洲| 国产精品欧美一区二区三区| 国产盗摄视频一区二区三区| 精品盗摄一区二区三区| 奇米综合一区二区三区精品视频 | 成人欧美一区二区三区视频网页| 久久99精品一区二区三区 | 欧美色视频在线观看| **欧美大码日韩| 91女神在线视频| 亚洲免费观看视频| 成人av一区二区三区| 1000精品久久久久久久久| 成人性视频网站| 中文字幕一区二区三区精华液| 丁香六月综合激情| 国产免费观看久久| 不卡电影一区二区三区| 成人欧美一区二区三区1314| 91精品福利在线| 亚洲成人一二三| 日韩一区二区三区免费观看| 久热成人在线视频| 国产日韩高清在线| 99久久久久久99| 亚洲电影在线播放| 精品国产人成亚洲区| 国产成人精品一区二| 一区二区三区四区蜜桃| 欧美日韩精品久久久| 精品一区二区三区不卡 | 成人av动漫网站| 一区二区三区四区五区视频在线观看| 欧美在线视频你懂得| 日本成人中文字幕在线视频| 久久夜色精品国产噜噜av| 91色在线porny| 日韩综合小视频| 久久日一线二线三线suv| 丁香六月久久综合狠狠色| 性做久久久久久免费观看| 久久奇米777| 91福利在线免费观看| 美国三级日本三级久久99| 欧美激情一区二区三区| 欧美精品一二三| 国产乱码精品1区2区3区| 亚洲精品国产精品乱码不99| 欧美一区二区三区免费| 91视频.com| 老司机午夜精品| 亚洲蜜臀av乱码久久精品蜜桃| 日韩欧美在线1卡| 91麻豆精品在线观看| 国产自产2019最新不卡| 亚洲一区二区三区四区五区中文| 国产欧美一区二区三区沐欲| 99re免费视频精品全部| 国产精品1区2区3区| 亚洲国产一区二区三区| 国产欧美一二三区| 在线观看91av| 在线欧美小视频| 国产成人亚洲综合a∨婷婷| 日韩成人dvd| 亚洲午夜电影在线| 国产精品久久久久影院色老大|