嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片

移動端列表查詢最佳實(shí)踐

2020-4-27    seo達(dá)人

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

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

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

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

相對位置取數(shù)存在的問題

性能劣勢

通過相對位置取數(shù)會具有性能問題,因?yàn)橐坏┦褂?offset 信息來獲取數(shù)據(jù),隨著頁數(shù)的增加,響應(yīng)速度也會變的越來越慢。因?yàn)樵跀?shù)據(jù)庫層面,我們每次所獲取的數(shù)據(jù)都是“從頭開始第幾條”,每次我們都需要從第一條開始計(jì)算,計(jì)算后舍棄前面的數(shù)據(jù),只取最后多條數(shù)據(jù)返回前端。

當(dāng)然了,對于相對位置取數(shù)來說,數(shù)據(jù)庫優(yōu)化是必然的,這里我就不多做贅述了。對于前端開發(fā)來說,優(yōu)秀的的查詢條件設(shè)計(jì)可以在一定方面解決此問題。

數(shù)據(jù)顯示重復(fù)

事實(shí)上,對于一個實(shí)際運(yùn)行的項(xiàng)目而言,數(shù)據(jù)更新才是常態(tài),如果數(shù)據(jù)更新的頻率很高或者你在當(dāng)前頁停留的時間過久的話,會導(dǎo)致當(dāng)前獲取的數(shù)據(jù)出現(xiàn)一定的偏差。

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

結(jié)合列表 key 維持渲染正確

我們在上面的問題中說明了,移動端下拉加載中使用相對位置查詢?nèi)?shù)是有問題的。

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

因?yàn)楫?dāng)前分頁請求時無狀態(tài)的。在分頁取到數(shù)據(jù)之后前端可以對取得的數(shù)據(jù)進(jìn)行過濾,過濾掉當(dāng)前頁面已經(jīng)存在的 key(例如 id 等能夠確定的唯一鍵)。

通過這種處理方式,我們至少可以保證當(dāng)前用戶看到的數(shù)據(jù)不會出現(xiàn)重復(fù)。同時當(dāng)列表數(shù)據(jù)可以編輯修改的時候,也不會出現(xiàn)因?yàn)?key 值相同而導(dǎo)致數(shù)據(jù)錯亂。

通過絕對位置獲取數(shù)據(jù)

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

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

對于相對位置取數(shù)來說,前端可以根據(jù)返回?cái)?shù)據(jù)的總數(shù)來判斷。但當(dāng)使用絕對位置取數(shù)時,即使獲取數(shù)據(jù)總數(shù),也無法判斷當(dāng)前查詢是否存在后續(xù)數(shù)據(jù)。

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

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

{ data: [], hasMore: true }

結(jié)合 HATEOAS 設(shè)計(jì)優(yōu)化

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

HATEOAS (Hypermedia As The Engine Of Application State, 超媒體即應(yīng)用狀態(tài)引起) 這個概念最早出現(xiàn)在 Roy Fielding 的論文中。REST 設(shè)計(jì)級別如下所示:

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

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

對于當(dāng)前的請求來說,服務(wù)端可以直接返回下一頁的信息,如

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

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

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

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

其他注意事項(xiàng)

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

偽代碼如下所示:

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

日歷

鏈接

個人資料

存檔

嫩草影院久久99_老司机午夜网站国内精品久久久久久久久_久久夜色精品国产_国产一级做a爰片久久毛片
<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 欧美国产一区二区| 欧美视频亚洲视频| 国产精品一区二区欧美| 99视频超级精品| 久久激情五月婷婷| 在线日韩av| 欧美日韩在线一区二区| 欧美3dxxxxhd| 午夜一区不卡| 亚洲精品自在久久| 蜜臀va亚洲va欧美va天堂 | 欧美成人情趣视频| 亚洲影院免费| 亚洲国产日韩欧美在线99| 乱人伦精品视频在线观看| 亚洲精品久久视频| 久久最新视频| 亚洲一区二区三区视频| 一区一区视频| 国产精品一区二区久久久| 国产伦精品一区二区三| 国产在线精品自拍| 国产精品女人网站| 女仆av观看一区| 欧美日韩国产电影| 欧美国产日产韩国视频| 久久精品亚洲一区| av成人天堂| 久久成人一区二区| 亚洲夫妻自拍| 欧美大胆人体视频| 另类欧美日韩国产在线| 亚洲日本免费| 欧美中文字幕不卡| 久久成人精品电影| 欧美日韩国产另类不卡| 国内精品久久久久久久影视麻豆 | 日韩一区二区免费高清| 在线精品视频一区二区| 亚洲午夜电影网| 欧美激情视频网站| 欧美一区二区三区久久精品茉莉花 | 亚洲欧洲一区二区在线播放| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩午夜剧场| 99热在线精品观看| 免播放器亚洲一区| 韩国一区二区在线观看| 好吊色欧美一区二区三区四区| 亚洲理论电影网| 亚洲一级二级| 91久久久久| 能在线观看的日韩av| 国产专区综合网| 久久精品视频在线| 亚洲免费在线视频| 久久婷婷国产综合精品青草| 久久久99免费视频| 国产精品一区毛片| 亚洲欧美中日韩| 裸体丰满少妇做受久久99精品| 99在线视频精品| 欧美片在线播放| 国产日韩欧美中文| 亚洲国产一区在线观看| 亚洲人成免费| 亚洲欧美一区二区三区在线| 91久久夜色精品国产九色| 欧美mv日韩mv国产网站| 亚洲精品欧美精品| 欧美在线1区| 久热这里只精品99re8久| 亚洲欧美日韩高清| 欧美成人中文字幕在线| 亚洲人精品午夜在线观看| 欧美成人免费在线观看| 久久天堂成人| 亚洲精品偷拍| 亚洲免费观看高清在线观看| 欧美日韩一区二区国产| 黄色国产精品| 农村妇女精品| 亚洲一区视频在线| 国产日韩一区二区| 欧美成人精品激情在线观看| 欧美刺激性大交免费视频 | 久久精品亚洲精品| 久久久另类综合| 国产精品在线看| 久久久人成影片一区二区三区观看 | 欧美一区二区网站| 亚洲人午夜精品免费| 中文av一区二区| 欧美成人国产| 午夜精品福利视频| 久久久久久久一区二区| 99精品久久免费看蜜臀剧情介绍| 一本色道久久综合精品竹菊| 欧美成人午夜激情视频| 亚洲一区二区在线观看视频| 亚洲国产美女精品久久久久∴| 欧美精品九九99久久| 亚洲日韩欧美视频| 亚洲伊人一本大道中文字幕| 一区视频在线| 亚洲视频精品在线| 亚洲韩国精品一区| 亚洲综合电影| av成人免费观看| 亚洲欧洲一区二区天堂久久| 国产欧美成人| 久久久久久久久综合| 午夜精品在线看| 日韩视频专区| 久久精品视频导航| 亚洲免费网址| 亚洲色图制服丝袜| 亚洲三级国产| 久久精品99| 欧美一区二区三区的| 欧美日本视频在线| 免费观看亚洲视频大全| 国产模特精品视频久久久久| 日韩视频免费观看| 亚洲开发第一视频在线播放| 久久先锋影音| 久久久久久久国产| 国产欧美一区视频| 亚洲视频日本| 亚洲视频在线免费观看| 亚洲永久免费精品| 亚洲无吗在线| 欧美特黄一级| 亚洲欧洲一区| 日韩一区二区精品| 欧美国产日韩一区二区在线观看 | 欧美精品二区| 亚洲国产精品久久久久秋霞影院| 激情欧美国产欧美| 久久精品一区二区三区不卡牛牛| 午夜欧美不卡精品aaaaa| 欧美日韩精品一区二区三区四区| 亚洲高清免费| 99国产成+人+综合+亚洲欧美| 久久资源av| 亚洲欧美日本另类| 欧美美女福利视频| 亚洲欧洲日产国码二区| 99精品黄色片免费大全| 欧美另类综合| 一本色道久久综合精品竹菊| 亚洲综合色丁香婷婷六月图片| 欧美日韩亚洲一区二区三区四区 | 91久久久久| 正在播放亚洲| 狂野欧美一区| 欧美国产精品va在线观看| 永久555www成人免费| 亚洲深夜激情| 欧美伊人久久| 激情久久久久久久久久久久久久久久| 性做久久久久久久免费看| 欧美中文字幕在线视频| 欧美激情一区二区三区四区| 欧美高清视频在线观看| 亚洲精品欧美激情| 欧美系列亚洲系列| 欧美成年视频| 亚洲精品中文字幕女同| 欧美日韩一区高清| 亚洲欧美日韩国产| 欧美国产亚洲精品久久久8v| 亚洲视频大全| 在线日韩精品视频| 欧美日韩四区| 久久久99久久精品女同性| 亚洲电影视频在线| 欧美激情一区二区三区| 欧美一区二区三区四区在线观看 | 亚洲图片欧美日产| 亚洲国产一区二区在线| 欧美日韩一区精品| 欧美在线视频导航| 亚洲精品视频在线观看网站| 久久久久国产精品麻豆ai换脸| 亚洲国产欧美另类丝袜| 国产精品第一区| 一本色道久久综合精品竹菊| 久久精品在线观看| 一本大道久久a久久精二百| 国产一区二区三区奇米久涩 | 免播放器亚洲一区| 亚洲欧美美女| 亚洲精品国产精品乱码不99按摩 | 一区二区三区精密机械公司| 久久婷婷一区| 亚洲成人在线| 国产热re99久久6国产精品| 欧美国产在线视频| 久久久av毛片精品|