国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > AJAX > 正文

Ajax無刷新分頁的性能優化方法

2024-09-01 08:28:35
字體:
來源:轉載
供稿:網友

Ajax無刷新分頁,已經是一個大家比較熟悉的事物了,大概就是web前端頁面上有一個js的方法,通過Ajax去請求服務器端的分頁數據接口,拿到數據后再在頁面上創建html結構,展現給用戶,類似于下面這樣:

<script type=”text/javascript”>function getPage(pageIndex){ajax({url:” RemoteInterface.cgi”,method:”get”,data:{pageIndex:pageIndex},callback:callback});}function callback(datalist){//todo:根據返回的datalist數據創建html結構展現給用戶。}</script>

其中,RemoteInterface.cgi是一個服務器端的接口。我們這里限于篇幅,涉及的實例代碼可能都不是完整的,只為了把意思表達明白。

UI上,可能會有各種款式的分頁控件,大家也都比較熟悉,比如:

但無非都是用戶點擊控件觸發這里的getPage(pageIndex)方法,這個getPage方法可能不是那么簡單。

如果按照代碼片段1的寫法,我們可以想象,用戶每次點擊翻頁的時候,都會請求一次RemoteInterface.cgi,在忽略數據可能有更新的情況下,除了第一次,后面每次getPage(1) 、getPage(2)、getPage(3)等等所觸發的遠程接口請求以及在網絡上往返的數據流量,其實都是重復的、不必要的。每頁第一次請求的時候都可以把這些數據以某種形式緩存在頁面上,用戶如果有興趣回頭來看之前翻過的頁,getPage方法應該先檢查本地緩存當中是否包含該頁數據,如果有,則直接重新展現給用戶,而不是去調用遠程接口。按照這個想法,我們可以把代碼片段1修改一下,如下:

<script type=”text/javascript”>var pageDatalist={};function getPage(pageIndex){if(pageDatalist[pageIndex]){ //如果本地的數據列表中包含當前請求頁碼的數據showPage(pageDatalist[pageIndex])//直接展現當前數據}else{ajax({url:” RemoteInterface.cgi”,method:”get”,data:{pageIndex:pageIndex},callback:callback});}}function callback(pageIndex,datalist){pageDatalist[pageIndex]= datalist; //緩存數據showPage(datalist);//展現數據}function showPage(datalist){//todo:根據返回的datalist數據創建html結構展現給用戶。}</script>

這樣做一來節約網絡請求往返的時間,更重要的是節約寶貴的網絡流量和減輕接口服務器的負擔。在低網速環境下或者接口服務器運行壓力已經比較大的情況下,這種必要的改進更能顯現明顯的優化效果。大名鼎鼎的yahoo 34條,第一條就是盡量減少HTTP請求次數。Ajax的異步請求,毫無疑問也是在http請求的范疇內。訪問量小的web應用或許感覺沒有必要,但是想象一下,如果有一個這樣的頁面:每天訪問量1000萬次,用戶平均翻5頁,其中有一頁為重復查看。那么這樣一個頁面,按照代碼片段1的寫法,平均每天將觸發5000萬次的數據請求,而按照代碼片段2的寫法,則平均每天至少可減少1000萬次請求。如果每次請求的數據量是20kb,則可以節約1000萬*20kb=200,000,000kb 約合190G的網絡流量。這樣看節約的資源是相當可觀的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 额济纳旗| 兰坪| 石家庄市| 福清市| 亚东县| 灯塔市| 兴和县| 垫江县| 色达县| 三亚市| 重庆市| 穆棱市| 营口市| 全州县| 凌云县| 阿克| 萨嘎县| 博白县| 河间市| 西吉县| 丰都县| 永寿县| 仪征市| 贵南县| 饶阳县| 吉林市| 曲阜市| 许昌市| 炎陵县| 桂平市| 綦江县| 芦山县| 独山县| 南昌县| 泗阳县| 岑溪市| 云阳县| 花垣县| 都匀市| 双江| 城步|