国产黄色免费网站_久久天天做天天爱综合色_精品国产一区久久久_成人黄色激情网站_久久成人在线视频_美女一区二区在线观看_亚洲精品免费一区亚洲精品免费精品一区 _91精品国产综合久久精品麻豆

移動端列表查詢最佳實踐

2020-4-27    seo達人

無論是 pc 端還是移動端,無可避免都會涉及到列表查詢有關的操作,但對于這兩種不同的設備,其列表查詢的最佳處理方式也是完全不同。

對于 pc 端列表查詢來說,前端通常是給與服務端當前需要獲取的數據量(如 pageCount,limit 等參數)以及所需要獲取數據的位置(如 pageSize,offset 等參數)作為查詢條件。然后服務端然后返回數據總數,以及當前數據,前端再結合這些數據顯示頁面總數等信息。這里我稱為相對位置取數。

對于移動端而言,沒有pc 端那么大的空間展示以及操作,所以基本上都會采用下拉取數這種方案。

那么我們在處理移動端列表查詢時候使用這種相對位置取數會有什么問題呢?

相對位置取數存在的問題

性能劣勢

通過相對位置取數會具有性能問題,因為一旦使用 offset 信息來獲取數據,隨著頁數的增加,響應速度也會變的越來越慢。因為在數據庫層面,我們每次所獲取的數據都是“從頭開始第幾條”,每次我們都需要從第一條開始計算,計算后舍棄前面的數據,只取最后多條數據返回前端。

當然了,對于相對位置取數來說,數據庫優化是必然的,這里我就不多做贅述了。對于前端開發來說,優秀的的查詢條件設計可以在一定方面解決此問題。

數據顯示重復

事實上,對于一個實際運行的項目而言,數據更新才是常態,如果數據更新的頻率很高或者你在當前頁停留的時間過久的話,會導致當前獲取的數據出現一定的偏差。

例如:當你在獲取最開始的 20 條數據后,正準備獲取緊接著的后 20 條數據時,在這段時間內 ,發生了數據增加,此時移動端列表就可能會出現重復數據。雖然這個問題在 pc 端也存在,但是 pc 端只會展示當前頁的信息,這樣就避免了該問題所帶來的負面影響。

結合列表 key 維持渲染正確

我們在上面的問題中說明了,移動端下拉加載中使用相對位置查詢取數是有問題的。

那么,如果當前不能迅速結合前后端進行修改 api 的情況下,當服務端傳遞過來的數據與用戶想要得的數據不一致,我們必須在前端進行處理,至少處理數據重復問題所帶來的負面影響。

因為當前分頁請求時無狀態的。在分頁取到數據之后前端可以對取得的數據進行過濾,過濾掉當前頁面已經存在的 key(例如 id 等能夠確定的唯一鍵)。

通過這種處理方式,我們至少可以保證當前用戶看到的數據不會出現重復。同時當列表數據可以編輯修改的時候,也不會出現因為 key 值相同而導致數據錯亂。

通過絕對位置獲取數據

如果不使用相對位置獲取數據,前端可以利用當前列表中的最后一條數據作為請求源參數。前端事先記錄最后一條數據的信息。例如當前的排序條件為創建時間,那么記錄最后一條數據的創建時間為主查詢條件(如果列表對應的數據不屬于個人,可能創建時間不能唯一決定當前數據位置,同時還需要添加 ID 等信息作為次要查詢條件)。

當我們使用絕對位置獲取數據時候,雖然我們無法提供類似于從第 1 頁直接跳轉 100 頁的查詢請求,但對于下拉加載這種類型的請求,我們不必擔心性能以及數據重復顯示的問題。

對于相對位置取數來說,前端可以根據返回數據的總數來判斷。但當使用絕對位置取數時,即使獲取數據總數,也無法判斷當前查詢是否存在后續數據。

從服務器端實現的角度來說,當用戶想要得到 20 條數據時候,服務端如果僅僅只向數據庫請求 20 條數據,是無法得知是否有后續數據的。服務端可以嘗試獲取當前請求的數據條數 + 1, 如向數據庫請求 21 條數據,如果成功獲得 21 條數據,則說明至少存在著 1 條后續數據,這時候,我們就可以返回 20 條數據以及具有后續數據的信息。但如果我們請求 21 條數據卻僅僅只能獲取 20 條數據(及以下),則說明沒有后續數據。

如可以通過 “hasMore” 字段來表示是否能夠繼續下拉加載的信息。

{ data: [], hasMore: true }

結合 HATEOAS 設計優化

事實上,前面我們已經解決了移動端處理列表查詢的問題。但是我們做的還不夠好,前端還需要結合排序條件來處理并提供請求參數,這個操作對于前端來說也是一種負擔。那么我們就聊一下 HATEOAS 。

HATEOAS (Hypermedia As The Engine Of Application State, 超媒體即應用狀態引起) 這個概念最早出現在 Roy Fielding 的論文中。REST 設計級別如下所示:

  • REST LEVEL 0: 使用 HTTP 作為傳輸方式
  • REST LEVEL 1: 引入資源的概念(每一個資源都有對應的標識符和表達)
  • REST LEVEL 2: 引入 HTTP 動詞(GET 獲取資源/POST 創建資源/PUT 更新或者創建字樣/DELETE 刪除資源 等)
  • REST LEVEL 3: 引入 HATEOAS (在資源的表達中包含了鏈接信息。客戶端可以根據鏈接來發現可以執行的動作)

HATEOAS 會在 API 返回的數據中添加下一步要執行的行為,要獲取的數據等 URI 的鏈接信息。客戶端只要獲取這些信息以及行為鏈接,就可以根據這些信息進行接下來的操作。

對于當前的請求來說,服務端可以直接返回下一頁的信息,如

{ data: [], hasMore: true, nextPageParams: {}    
}

服務端如此傳遞數據,前端就不需要對其進行多余的請求處理,如果當前沒有修改之前的查詢以及排序條件,則只需要直接返回 “nextPageParams” 作為下一頁的查詢條件即可。

這樣做的好處不但符合 REST LEVEL 3,同時也減輕了前端的心智模型。前端無需配置下一頁請求參數。只需要在最開始查詢的時候提供查詢條件即可。

當然,如果前端已經實現了所有排序添加以及查詢條件由服務端提供,前端僅僅提供組件,那么該方案更能體現優勢。 前端是不需要知道當前業務究竟需要什么查詢條件,自然也不需要根據查詢條件來組織下一頁的條件。同時,該方案的輸入和輸出都由后端提供,當涉及到業務替換( 查詢條件,排序條件修改)時候,前端無需任何修改便可以直接替換和使用。

其他注意事項

一旦涉及到移動端請求,不可避免的會有網絡問題,當用戶在火車或者偏遠地區時候,一旦下拉就會涉及取數,但是當前數據沒有返回之前,用戶多次下拉可能會有多次取數請求,雖然前端可以結合 key 使得渲染不出錯,但是還是會在緩慢的網絡下請求多次,無疑雪上加霜。這時候我們需要增加條件變量 loading。

偽代碼如下所示:

// 查詢 function search(cond) {
  loading = true api.then(res => {
      loading = false }).catch(err => {
      loading = false })
} // 獲取下一頁數據 function queryNextPage() { if (!nextPageParams) return if (!loading) return search(nextPageParams)
}

日歷

鏈接

個人資料

藍藍設計的小編 http://www.newchinaweekly.com

存檔

国产精品成人在线观看| 国产微拍精品一区| 国产一级中文字幕| 国产免费久久久| 欧美图片欧美激情欧美精品| 天堂午夜在线| 精品无人乱码| 精品人妻在线视频| 一区二区三区久久久久| 天天操夜夜操视频| 国产小视频在线观看免费| 最近国语视频在线观看免费播放| 黄色激情小视频| 中文字幕码精品视频网站| 国产乱人视频免费播放| 午夜在线网站| 久久日本片精品aaaaa国产| 国产精品成人一区二区不卡| 国产99久久久国产精品潘金网站| 久久性天堂网| 欧美国产精品一区| 日韩一区二区在线免费观看| 欧美美最猛性xxxxxx| 国产亚洲精品自在久久| 亚洲熟妇av一区二区三区| 亚洲AV无码成人精品区明星换面 | 午夜精品短视频| 日本中文字幕影院| 久久国产视频精品| 国产成人精品18| a√在线中文网新版址在线| 日韩在线成人| 韩日精品一区| 欧美成人有码| 国产精品福利av| 在线成人激情黄色| 国产精品久久久久久久小唯西川 | 精品人妻大屁股白浆无码| 国产亚洲精品熟女国产成人| 亚洲成人一级片| 福利资源在线久| 久久久久久久久成人| 久久精品国产精品亚洲红杏| 一本高清dvd不卡在线观看| 欧美激情久久久久久| 妞干网这里只有精品| 亚洲精品自拍视频在线观看| 亚洲成人国产综合| 成人福利片网站| 中文字幕一区二区三区久久网站| 国产精品久久久久久久久久免费看 | 视频一区二区三区中文字幕| 色综合天天天天做夜夜夜夜做| 午夜精品理论片| 国产欧美最新羞羞视频在线观看| 色综合久久久久无码专区| 国产精品23p| av影音资源| 美女精品视频在线| 大白屁股一区二区视频| 亚洲的天堂在线中文字幕| 91精品天堂| 成年人网站免费看| 麻豆精品传媒视频观看| 国产免费拔擦拔擦8x在线播放| 久久av一区二区三区| 欧美日韩视频在线第一区| 伊人伊成久久人综合网小说| 小说区图片区图片区另类灬| 五月婷婷综合激情网| 操她视频网站| 久久99国产精品久久99大师| 国产亚洲一区二区在线观看| 亚洲一二三四在线观看| 97久久久久久| 波多野结衣中文字幕在线播放| 成人午夜视频一区二区播放| 国产乱色在线观看| 久久资源在线| 亚洲精品不卡在线| 强伦女教师2:伦理在线观看| 久久久久久无码精品大片| 美州a亚洲一视本频v色道| 欧美日韩精品一区二区三区视频| 视频一区二区中文字幕| 亚洲风情亚aⅴ在线发布| 中文字幕一区二区三区乱码 | 成人永久免费视频| 国产一区二区三区在线观看视频 | 夜色av.com| 欧美艳星介绍134位艳星| 亚洲第一福利视频在线| 影视一区二区| 精品久久久久久久久久久久| 成人www视频在线观看| 卡一卡二卡三在线观看| 91人成在线| 欧美高清视频在线观看mv| 欧美性色黄大片| 日韩av免费电影| 亚洲 小说区 图片区| av大大超碰在线| av激情亚洲男人天堂| 欧美亚洲国产另类| 欧美日韩高清丝袜| 免费一级淫片| 亚洲欧美卡通另类91av| 亚洲精品一区二区三区婷婷月| 国产免费黄视频| 乱中年女人av三区中文字幕| 国产精品亚洲综合在线观看| 亚洲一区二区av电影| 欧美成人综合一区| 老司机av网站| 天干夜天天夜天干天ww| 亚洲成人精品| 夜夜爽夜夜爽精品视频| 成人h视频在线观看| 国产一区二区99| 综合图区亚洲| 国产日韩欧美麻豆| 91深夜福利视频| 欧美日韩综合一区二区三区| 国产精品13p| 亚洲乱码国产乱码精品精的特点 | 亚洲综合极品香蕉久久网| 1313精品午夜理伦电影| 91色九色蝌蚪| 成人免费黄色网| 成人a v视频| 黄色成人小视频| 日韩欧美中文在线| 91日韩在线播放| 国产成人无码av| 69堂免费精品视频在线播放| 亚洲在线观看免费| 日本一区二区三区四区五区六区| 在线观看精品视频看看播放 | 老司机福利在线观看| 日本中文字幕在线看| 亚洲小说欧美另类社区| 日韩中文字幕在线免费观看| 一级片手机在线观看| 91成人高清| 亚洲欧洲无码一区二区三区| 亚洲图片小说在线| 国产美女自拍| 国产日韩亚洲| 国产精品爱久久久久久久| 中文字幕国产高清| 嫩模私拍啪啪| www.在线欧美| 久久久精品网站| 女人18毛片毛片毛片毛片区二| a级影片在线| 午夜私人影院久久久久| av动漫在线看| 人与动性xxxxx免费视频| 成人动漫一区二区在线| 久久99久久99精品蜜柚传媒| 四虎精品成人免费观看| 韩日视频一区| 国产成人精品视频在线| 国产精品丝袜黑色高跟鞋| 性欧美高清come| 成人污视频在线观看| 国产日韩欧美一区二区| 国产一级黄色大片| 日一区二区三区| 色综合一区二区三区| 日本va中文字幕| 在线看中文字幕| 亚洲三级免费电影| 欧在线一二三四区| 麻豆app在线观看| 亚洲国产日韩一区二区| 性欧美极品xxxx欧美一区二区| 男人的天堂在线视频| 午夜伦理一区二区| 久久久久亚洲av无码专区首jn| av网站在线看| 欧美久久久久久久久久| 91网站免费入口| 小明成人免费视频一区| 亚洲欧美一区二区三区在线| 久草国产在线观看| 久久中文资源| 精品中文字幕在线观看| 国产裸体永久免费无遮挡| 国产一区清纯| 国产精品久久久久久久天堂第1集| 国产成人久久精品77777| 国产福利一区在线观看| 日韩精品一区二区免费| 在线观看av网| 日本韩国一区二区三区| a级黄色免费视频| 日韩影视在线观看| 日本精品性网站在线观看| 欧美疯狂爱爱xxxxbbbb|