<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

      后端分頁(yè)藏了3個(gè)陷阱,第2個(gè)讓抖音工程師栽過(guò)跟頭

      0
      分享至


      面試時(shí)背過(guò)"偏移量分頁(yè) vs 游標(biāo)分頁(yè)"的人,80%在生產(chǎn)環(huán)境踩過(guò)坑。不是概念沒(méi)懂,是不知道哪道題會(huì)考。

      作者最近接了個(gè)無(wú)限滾動(dòng)+虛擬列表的需求,把分頁(yè)從"面試八股"變成了"線上決策"。這篇是他復(fù)盤后的完整筆記——包括那個(gè)讓列表漏項(xiàng)的經(jīng)典場(chǎng)景。

      偏移量分頁(yè):像翻紙質(zhì)書,但書頁(yè)會(huì)自己變

      客戶端告訴服務(wù)器:"跳過(guò)前40條,給我接下來(lái)的20條。"

      服務(wù)器端的實(shí)現(xiàn)簡(jiǎn)單到像切數(shù)組:ALL_POSTS.slice(40, 60)。前端維護(hù)一個(gè)累加的offset,每次請(qǐng)求往上加20。知道什么時(shí)候停?服務(wù)器返回total總數(shù),客戶端比對(duì)當(dāng)前已加載長(zhǎng)度就行。

      這套機(jī)制用了幾十年,直到數(shù)據(jù)開(kāi)始流動(dòng)。

      想象一個(gè)10個(gè)商品的列表。你正在看第1頁(yè)(商品1-10),這時(shí)候商品5被刪了。列表變成[1,2,3,4,6,7,8,9,10,11]。你翻頁(yè)請(qǐng)求offset=10,服務(wù)器跳過(guò)前10個(gè)——現(xiàn)在前10個(gè)是1,2,3,4,6,7,8,9,10,11——于是你從商品11開(kāi)始返回。

      商品6永遠(yuǎn)消失了。不是被刪的,是被分頁(yè)邏輯吞掉的。

      這就是"跳過(guò)項(xiàng)問(wèn)題"(Skipped Item Problem):偏移量分頁(yè)在動(dòng)態(tài)數(shù)據(jù)下會(huì)漏項(xiàng)或重復(fù)。數(shù)據(jù)插入、刪除、排序變化時(shí),offset的數(shù)學(xué)假設(shè)就失效了。

      更隱蔽的是性能陷阱。數(shù)據(jù)庫(kù)執(zhí)行OFFSET 1000000 LIMIT 20時(shí),必須先掃描并丟棄前100萬(wàn)行,成本隨頁(yè)數(shù)線性增長(zhǎng)。作者提到,某些場(chǎng)景下"深分頁(yè)"的查詢時(shí)間能從毫秒拖到秒級(jí)。

      游標(biāo)分頁(yè):像握著一根繩子,而不是數(shù)臺(tái)階

      游標(biāo)分頁(yè)放棄了"第幾頁(yè)"的概念,改用錨定點(diǎn)。客戶端不再說(shuō)"給我第3頁(yè)",而是說(shuō)"給我ID大于xyz的接下來(lái)20條"。

      這個(gè)xyz就是游標(biāo)——通常是排序字段的編碼值(比如時(shí)間戳+ID的組合)。服務(wù)器用WHERE條件直接定位,而不是跳過(guò)N行。

      優(yōu)勢(shì)很明顯:沒(méi)有深分頁(yè)的性能懸崖,因?yàn)閿?shù)據(jù)庫(kù)可以用索引直接定位游標(biāo)位置。也沒(méi)有跳過(guò)項(xiàng)問(wèn)題——即使中間數(shù)據(jù)被刪,游標(biāo)指向的相對(duì)位置不變,下一頁(yè)從正確的錨定點(diǎn)繼續(xù)。

      代價(jià)同樣真實(shí)。你無(wú)法直接跳轉(zhuǎn)到"第50頁(yè)",因?yàn)椴恢赖?0頁(yè)的游標(biāo)是什么。作者提到,總頁(yè)數(shù)、進(jìn)度條、直接跳轉(zhuǎn)這些UI模式全部失效。無(wú)限滾動(dòng)很合適,傳統(tǒng)分頁(yè)表格很尷尬。

      還有一個(gè)工程細(xì)節(jié):游標(biāo)需要編碼。作者建議把多個(gè)排序字段(如created_at + id)拼成字符串后Base64,避免客戶端篡改,也隱藏內(nèi)部實(shí)現(xiàn)。

      決策框架:不是選更好的,是選更合適的

      作者最后給了一個(gè)對(duì)照表,但核心邏輯可以壓縮成兩句話:

      數(shù)據(jù)靜態(tài)、需要跳轉(zhuǎn)、用戶想看進(jìn)度 → 偏移量。比如后臺(tái)管理系統(tǒng)的表格,管理員可能直接點(diǎn)最后一頁(yè)。

      數(shù)據(jù)動(dòng)態(tài)、實(shí)時(shí)性高、深分頁(yè)常見(jiàn) → 游標(biāo)。比如社交信息流、消息列表、股票行情——這些場(chǎng)景下跳過(guò)項(xiàng)問(wèn)題是不可接受的。

      作者提到一個(gè)真實(shí)案例:某團(tuán)隊(duì)在實(shí)現(xiàn)"未讀消息"功能時(shí),用偏移量分頁(yè)+標(biāo)記已讀。用戶邊讀邊標(biāo)記,列表實(shí)時(shí)收縮,結(jié)果頻繁出現(xiàn)消息"閃爍"或丟失。切到游標(biāo)分頁(yè)后,問(wèn)題消失。

      還有一個(gè)混合策略:前幾頁(yè)用偏移量(支持跳轉(zhuǎn)),超過(guò)一定深度后自動(dòng)切換游標(biāo)(保性能)。作者警告這種方案增加了復(fù)雜度,"除非有明確數(shù)據(jù)證明需要,否則別急著上"。

      無(wú)限滾動(dòng)+虛擬列表的場(chǎng)景,作者最終選了游標(biāo)分頁(yè)。虛擬列表只渲染視口內(nèi)的DOM節(jié)點(diǎn),游標(biāo)分頁(yè)只拉取需要的數(shù)據(jù)塊,兩者配合能把內(nèi)存和請(qǐng)求都?jí)旱阶畹汀?/p>

      他最后留下一個(gè)未解決的細(xì)節(jié):游標(biāo)分頁(yè)的"上一頁(yè)"實(shí)現(xiàn)比想象中麻煩,特別是支持雙向無(wú)限滾動(dòng)的場(chǎng)景。讀者里做過(guò)類似需求的人,你們的游標(biāo)是單向還是雙向設(shè)計(jì)的?

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點(diǎn)推薦
      法國(guó)總理疑用ChatGPT寫推文引發(fā)爭(zhēng)議

      法國(guó)總理疑用ChatGPT寫推文引發(fā)爭(zhēng)議

      新歐洲
      2026-04-06 18:12:24
      為足總杯讓路,曼城、切爾西的英超第34輪比賽提前進(jìn)行

      為足總杯讓路,曼城、切爾西的英超第34輪比賽提前進(jìn)行

      懂球帝
      2026-04-07 18:15:14
      萬(wàn)斯出馬力保歐盟親華派,事成之后,也算幫了中國(guó)一個(gè)忙

      萬(wàn)斯出馬力保歐盟親華派,事成之后,也算幫了中國(guó)一個(gè)忙

      溫讀史
      2026-04-07 19:38:14
      有錢買不到化肥?俄羅斯限供,中國(guó)嚴(yán)控,全球化肥徹底告急

      有錢買不到化肥?俄羅斯限供,中國(guó)嚴(yán)控,全球化肥徹底告急

      世界熱點(diǎn)背后解讀
      2026-04-06 15:25:42
      096型戰(zhàn)略核潛艇多猛?臺(tái)專家:美國(guó)更不敢和大陸正面“開(kāi)戰(zhàn)”

      096型戰(zhàn)略核潛艇多猛?臺(tái)專家:美國(guó)更不敢和大陸正面“開(kāi)戰(zhàn)”

      瀲滟晴方DAY
      2026-04-07 19:18:03
      馬杜羅剛被二次審判,委內(nèi)瑞拉新元首就變臉,對(duì)華翻臉惹眾怒

      馬杜羅剛被二次審判,委內(nèi)瑞拉新元首就變臉,對(duì)華翻臉惹眾怒

      觀察者海風(fēng)
      2026-04-07 19:39:50
      普京接連出招,新仇舊恨一起算!日本油盡燈枯,全國(guó)大亂倒計(jì)時(shí)

      普京接連出招,新仇舊恨一起算!日本油盡燈枯,全國(guó)大亂倒計(jì)時(shí)

      肖茲探秘說(shuō)
      2026-04-06 23:14:42
      如果馬寅初沒(méi)提出人口論,沒(méi)有計(jì)劃生育,我國(guó)如今會(huì)變成什么樣子

      如果馬寅初沒(méi)提出人口論,沒(méi)有計(jì)劃生育,我國(guó)如今會(huì)變成什么樣子

      近史談
      2026-04-07 19:33:47
      Woc!才5年6200萬(wàn),老鷹找到了自己的“鷹王”

      Woc!才5年6200萬(wàn),老鷹找到了自己的“鷹王”

      體育新角度
      2026-04-07 18:49:23
      空手套石油?伊朗差點(diǎn)上了印度的當(dāng)!60萬(wàn)桶石油最終改道運(yùn)往中國(guó)

      空手套石油?伊朗差點(diǎn)上了印度的當(dāng)!60萬(wàn)桶石油最終改道運(yùn)往中國(guó)

      黑鷹觀軍事
      2026-04-07 18:27:28
      人能節(jié)儉到什么程度?網(wǎng)友:十幾年沒(méi)換老公,香水只噴人中

      人能節(jié)儉到什么程度?網(wǎng)友:十幾年沒(méi)換老公,香水只噴人中

      另子維愛(ài)讀史
      2026-04-06 19:10:34
      皇馬vs拜仁前瞻:歐洲德比戰(zhàn)火重燃

      皇馬vs拜仁前瞻:歐洲德比戰(zhàn)火重燃

      西哇體育
      2026-04-07 18:36:07
      從朝鮮回來(lái)我沉默了!打破所有刻板印象,不為人知的真相太扎心!

      從朝鮮回來(lái)我沉默了!打破所有刻板印象,不為人知的真相太扎心!

      老特有話說(shuō)
      2026-04-07 13:55:59
      1955年有人不贊成陳毅授元帥,毛主席反駁:3年游擊戰(zhàn)不是白打的

      1955年有人不贊成陳毅授元帥,毛主席反駁:3年游擊戰(zhàn)不是白打的

      新一說(shuō)史
      2026-04-07 16:58:15
      靠7個(gè)員工和1只貓,年入2500萬(wàn)美元!這可能是AI時(shí)代最好的模板

      靠7個(gè)員工和1只貓,年入2500萬(wàn)美元!這可能是AI時(shí)代最好的模板

      DeepTech深科技
      2026-04-06 20:33:49
      27歲單親媽媽開(kāi)直播,播著播著睡著了,醒來(lái)一看后臺(tái)直接傻眼了

      27歲單親媽媽開(kāi)直播,播著播著睡著了,醒來(lái)一看后臺(tái)直接傻眼了

      小椰的奶奶
      2026-04-01 17:04:55
      太黑了!315晚會(huì)后,最先塌房的不是奶茶,也不是辣條,而是雞蛋

      太黑了!315晚會(huì)后,最先塌房的不是奶茶,也不是辣條,而是雞蛋

      小熊侃史
      2026-04-07 07:20:08
      王皓總結(jié)世界杯:壓力大失眠,王楚欽拯救了我們,溫瑞博還稚嫩

      王皓總結(jié)世界杯:壓力大失眠,王楚欽拯救了我們,溫瑞博還稚嫩

      帛河體育
      2026-04-06 20:09:11
      市委書記暗訪撞見(jiàn)民工被派出所長(zhǎng)毆打,走近一看,被打者是他二叔

      市委書記暗訪撞見(jiàn)民工被派出所長(zhǎng)毆打,走近一看,被打者是他二叔

      歷史八卦社
      2024-08-21 18:13:16
      伊朗早已想好了:打完這場(chǎng)仗,自己將成阿拉伯國(guó)家的新“保護(hù)傘”

      伊朗早已想好了:打完這場(chǎng)仗,自己將成阿拉伯國(guó)家的新“保護(hù)傘”

      十夏九漓
      2026-04-05 13:56:19
      2026-04-07 20:23:00
      我是一個(gè)粉刷匠2
      我是一個(gè)粉刷匠2
      有態(tài)度網(wǎng)友ytd
      862文章數(shù) 10關(guān)注度
      往期回顧 全部

      科技要聞

      滿嘴謊言!OpenAI奧特曼黑料大起底

      頭條要聞

      英媒:伊朗最高領(lǐng)袖病重昏迷 無(wú)法參與任何國(guó)家決策

      頭條要聞

      英媒:伊朗最高領(lǐng)袖病重昏迷 無(wú)法參與任何國(guó)家決策

      體育要聞

      官宣簽約“AI球員”,這支球隊(duì)被罵慘了...

      娛樂(lè)要聞

      女首富陳麗華離世 被曝生前已分好遺產(chǎn)

      財(cái)經(jīng)要聞

      10萬(wàn)億財(cái)政轉(zhuǎn)移支付,被誰(shuí)拿走了?

      汽車要聞

      不止是大 極狐首款MPV問(wèn)道V9靜態(tài)體驗(yàn)

      態(tài)度原創(chuàng)

      健康
      數(shù)碼
      教育
      公開(kāi)課
      軍事航空

      干細(xì)胞抗衰4大誤區(qū),90%的人都中招

      數(shù)碼要聞

      榮耀多款新品PC定檔,方飛透露WIN游戲本將成為三角洲聯(lián)賽指定本

      教育要聞

      高校官宣:教師,沒(méi)有“非升即走”!

      公開(kāi)課

      李玫瑾:為什么性格比能力更重要?

      軍事要聞

      美軍營(yíng)救飛行員出動(dòng)155架飛機(jī)

      無(wú)障礙瀏覽 進(jìn)入關(guān)懷版