大神們請教一個思路
如果我有個點擊量計數的欄位,想根據這個欄位為app輸出最熱門的資料列表
如果在第一頁最後上拉重新整理的時候原來排第一位的資料點擊量被其他資料超過,那麼重新整理出來不是資料就重複了,比如微博的最熱排行,它是怎麼避免重新整理第二頁的時候由於即時資料導致第一頁的資料有可能又被刷到第二頁呢
再舉個例子,比如說是即時排名一樣的。你開啟App之後,小王是第一名。你過了5分鐘,再往上拖動的時候,小王可能是20名,重新整理出來的資料,前面部分有小王,後面部分也有小王。這就重複了,如果在app端把重複的資料剔除的話,如果極端情況下可能重新整理的第二頁全部都是重複之前的,那麼給人感覺就是刷不出第二頁了
如果做個緩衝的話,又做不到即時。我暫時想到個委屈求全的方法像微博用since_id和max_id通過timeline的方式擷取資料。
請問如果想實現上拉重新整理的話,怎麼避免這個問題呢?
再補充一下:
比如前5分鐘排前10的資料,5分鐘後變成10-20名了,那麼如果我上拉重新整理一次是10條資料的話,第一頁和第二頁傳過來的資料就是一樣的。
請問如何避免呢?
回複內容:
大神們請教一個思路
如果我有個點擊量計數的欄位,想根據這個欄位為app輸出最熱門的資料列表
如果在第一頁最後上拉重新整理的時候原來排第一位的資料點擊量被其他資料超過,那麼重新整理出來不是資料就重複了,比如微博的最熱排行,它是怎麼避免重新整理第二頁的時候由於即時資料導致第一頁的資料有可能又被刷到第二頁呢
再舉個例子,比如說是即時排名一樣的。你開啟App之後,小王是第一名。你過了5分鐘,再往上拖動的時候,小王可能是20名,重新整理出來的資料,前面部分有小王,後面部分也有小王。這就重複了,如果在app端把重複的資料剔除的話,如果極端情況下可能重新整理的第二頁全部都是重複之前的,那麼給人感覺就是刷不出第二頁了
如果做個緩衝的話,又做不到即時。我暫時想到個委屈求全的方法像微博用since_id和max_id通過timeline的方式擷取資料。
請問如果想實現上拉重新整理的話,怎麼避免這個問題呢?
再補充一下:
比如前5分鐘排前10的資料,5分鐘後變成10-20名了,那麼如果我上拉重新整理一次是10條資料的話,第一頁和第二頁傳過來的資料就是一樣的。
請問如何避免呢?
問題的關鍵在於熱門排行榜的變更周期和排行變化幅度,如果按樓主所說,熱門排行榜變更周期很短(翻頁的間隙就可能變化)變化幅度也很大,前10可能會在翻頁的間隙掉到10-20.
如果是這樣,真沒必要做重複性排除,這種頻率和幅度的排行,做了排除反而不是真實的情況
如果樓主一定要實現不重複的效果,以這種頻率和幅度的排行,使用者第一次訪問時應該一次性擷取整個熱門排行榜資料(無論是在服務端還是在用戶端),使用者翻頁時,不再從即時資料中獲得,而是從第一次訪問時就已經得到的資料中獲得。再設定一個重新整理榜單功能,使用者重新整理後再此獲得目前時間的所有熱門排行榜資料。
簡單的說,就是重新整理榜單獲得榜單資料ALL,翻頁不擷取榜單資料,僅是選取已經儲存的榜單資料的不同分頁。
你說的情況是存在的,其實如果像微博這種情境下也很容易發生(第一頁的資料因為有新微博進來掉到第二頁)
有一個土的方式是把你請求第一頁時的時間帶上,它只拿早於這個時間的資料,直到使用者重新整理整個頁面,這樣時間軸是不會被打亂的,不過這個對於動態更新的排名資訊是不適用的
另一個很土的解決方案就是用戶端可以對接收到的資料進行檢查,如果發現有重複項進行額外的處理,包括不限於去重之後進行額外的請求來補全資料