Feed流產(chǎn)品的重用機(jī)制

10 評(píng)論 4837 瀏覽 31 收藏 8 分鐘

編輯導(dǎo)語(yǔ):?feed是將用戶主動(dòng)訂閱的若干消息源組合在一起形成內(nèi)容聚合器,幫助用戶持續(xù)地獲取最新的訂閱源內(nèi)容;feed流即持續(xù)更新并呈現(xiàn)給用戶內(nèi)容的信息流;本文作者介紹了Feed流產(chǎn)品的重用機(jī)制,我們一起來看一下。

作為一名產(chǎn)品經(jīng)理,在體驗(yàn)產(chǎn)品時(shí)經(jīng)常會(huì)遇到一些bug,這時(shí)開發(fā)會(huì)說能否錄屏復(fù)現(xiàn)一下bug。

以最常用的新聞feed流為例,同一個(gè)feed你之前發(fā)現(xiàn)有問題(比如UI錯(cuò)位、數(shù)據(jù)錯(cuò)亂)等,再刷回這個(gè)feed卻沒有問題了。

????????????????? ? [步驟一]發(fā)現(xiàn)Feed 1有bug

?[步驟二]下滑看其他內(nèi)容

[步驟三]刷回Feed1,發(fā)現(xiàn)bug不見了

這時(shí)場(chǎng)面就會(huì)很尷尬,開發(fā)覺得你找事,而你剛才確實(shí)發(fā)現(xiàn)有bug。

出現(xiàn)上面問題,我們需要學(xué)習(xí)一下feed流本身是怎么實(shí)現(xiàn)的。

  • 我們有一個(gè)基本的共識(shí):每一個(gè)feed要想展示出來,都是需要被創(chuàng)建的。
  • 我們思考一下,既然feed需要被創(chuàng)建,那它被創(chuàng)建的時(shí)機(jī)有哪幾種可能呢?

一、當(dāng)我刷到n條內(nèi)容時(shí),頁(yè)面立馬就創(chuàng)建n個(gè)feed

這種最直觀也最簡(jiǎn)單:

但是一次性創(chuàng)建的操作是不可取的。要知道每創(chuàng)建一個(gè)feed都需要消耗內(nèi)存(可以理解成每買一個(gè)包包放家里,家里的空間都會(huì)少很多)。

那么類似今日頭條、知乎、視頻號(hào)這種產(chǎn)品,刷了半小時(shí)后很可能你已經(jīng)看了上百個(gè)內(nèi)容;如果手機(jī)這時(shí)也創(chuàng)建了上百個(gè)feed,那么隨著你使用時(shí)間越長(zhǎng),手里機(jī)創(chuàng)建的feed會(huì)越多(包包買得越來越多),手機(jī)內(nèi)存空間會(huì)漸漸不夠用(家里可用房間會(huì)越來越少),而手機(jī)會(huì)越來越卡,直到內(nèi)存完全被占用而卡死(家里的空間被用完)。

但實(shí)際上我們刷feed流類的產(chǎn)品時(shí),并沒有出現(xiàn)所描述的隨著使用時(shí)間變長(zhǎng)而越來越卡頓的情況,所以“刷到n條內(nèi)容時(shí),頁(yè)面立馬就創(chuàng)建n個(gè)feed”這種創(chuàng)建方式不可取。

二、只有當(dāng)我即將看到某條內(nèi)容時(shí),才創(chuàng)建feed來進(jìn)行展示

這種方案可以有效避免創(chuàng)建太多feed導(dǎo)致系統(tǒng)內(nèi)存用光的問題;以知乎為例,平時(shí)我們使用的手機(jī)最多展示5-10條知乎的內(nèi)容,所以系統(tǒng)最多只需要占用5-10條feed的空間。

用包包來理解就是:家里只有一面墻可以放包包,放包包的上限是10個(gè),每次我們買來新的包包,然后把舊的包包給扔掉,這樣就可以始終保持家里有足夠的放包空間。

對(duì)價(jià)格敏感的產(chǎn)品已經(jīng)發(fā)現(xiàn)了方案二的問題,為啥我每次買到新的包包,都要買舊的包包給扔掉呀?那豈不是太浪費(fèi)錢了;類比到手機(jī)App上就是太浪費(fèi)手機(jī)的計(jì)算能力了,尤其是當(dāng)你快速滑動(dòng)手機(jī)屏幕時(shí),就會(huì)出現(xiàn)上百條feed被創(chuàng)建,同時(shí)上百條feed被銷毀,暴殄天物啊。

所以,第二種“只有當(dāng)我即將看到某條內(nèi)容時(shí),才創(chuàng)建feed來進(jìn)行展示”實(shí)際上也不是最可行的方案。

那么怎么樣既省內(nèi)存空間,又避免重復(fù)的計(jì)算開銷呢?

三、重用機(jī)制

還以買包包為例,實(shí)際上每個(gè)包包的主要區(qū)別是表面上的區(qū)別(比如紋理、顏色等),包包的主要功能基本上都是相似的。

遂在方案二的基礎(chǔ)上,當(dāng)我買夠了超過一面墻的包包后,此時(shí)如果我又看上了新包包,如果“再花錢買一個(gè)新的,然后把之前舊的給扔掉”(方案二)就太浪費(fèi)了。

所以我們靈機(jī)一動(dòng)發(fā)現(xiàn)新包包和舊包包,主要功能基本一樣;那么我只要請(qǐng)人來幫我把舊包包的顏色、紋理改裝成和新包包的樣式一樣,這樣用最小的成本獲取了新的包包。

實(shí)際上,F(xiàn)eed流背后也有著類似重用的機(jī)制,系統(tǒng)會(huì)先創(chuàng)建足夠屏幕展示的feed;而當(dāng)你再向下滑動(dòng)手機(jī)時(shí),會(huì)把舊feed拿過來進(jìn)行重用,把數(shù)據(jù)更新即可。

明白feed流有重用機(jī)制,我們就可以解答最開始的問題:“以最常用的新聞feed流為例,同一個(gè)feed你之前發(fā)現(xiàn)有問題(比如UI錯(cuò)位、數(shù)據(jù)錯(cuò)亂)等,再刷回這個(gè)feed卻沒有問題了。”

之前看到錯(cuò)位的feed A,和你重新刷回的feed A,其樣式雖然一樣,但其本質(zhì)已經(jīng)變了。

你第一次看到的feed A,是系統(tǒng)最開始創(chuàng)建的feed A,而你重新刷回看到的feed A,已經(jīng)是重用了別人的feed,只是更新了feed A的數(shù)據(jù)而已。

還是用包包舉例:

房間里一共可以放下三個(gè)包包,按時(shí)間線于是你最初買了LV、Gucci、PRADA這三個(gè)包包。

當(dāng)你想擁有Chanel包包時(shí),這時(shí)因?yàn)長(zhǎng)V包包是最先買的,所以會(huì)把LV包包改裝成Chanel包包,現(xiàn)在柜子里就變成:Gucci、PRADA、Chanel這三個(gè)包包。

過了幾天你又想要之前的LV包包了,于是按時(shí)間線這時(shí)會(huì)把Channel包包給改裝回LV包包,重新變成:LV、Gucci、PRADA這三個(gè)包包。

雖然這時(shí)還是LV、Gucci、PRADA這三個(gè)包包,但實(shí)際上第一個(gè)LV包包已經(jīng)不是最新的了,它已經(jīng)從新品變成了二手貨。

這種機(jī)制可以用古希臘哲學(xué)家赫拉克利特所說“人不能兩次踏進(jìn)同一條河流”進(jìn)行概括,下次當(dāng)你遇到feed流產(chǎn)品bug不可復(fù)現(xiàn)時(shí),可以從feed流的重用機(jī)制進(jìn)行思考。

 

公眾號(hào):和產(chǎn)品經(jīng)理聊技術(shù)

本文由 @和產(chǎn)品經(jīng)理聊技術(shù) 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 2次刷到feed a 是相同內(nèi)容嗎?有刷新嗎?無刷新且相同的內(nèi)容的話,feed模版也有更新嗎?

    來自香港 回復(fù)
    1. 是的,是相同內(nèi)容~

      回復(fù)
    2. 有刷新的,雖然內(nèi)容相同,但是第二次刷到就已經(jīng)被重用了,模板是會(huì)更新的。

      回復(fù)
    3. 如果你說的刷新是從后臺(tái)拉到新數(shù)據(jù)的話,那是沒有刷新的。
      無刷新且內(nèi)容相同,只要你把這條內(nèi)容移出屏幕再移回來,這個(gè)feed的模版就更新了。

      回復(fù)
  2. 內(nèi)容真的很不錯(cuò) 學(xué)習(xí)了!~

    來自廣東 回復(fù)
    1. 多謝肯定,可以關(guān)注我。和產(chǎn)品經(jīng)理聊技術(shù) 這個(gè)系列準(zhǔn)備做成專欄推出。

      回復(fù)
  3. 可能是在假設(shè)有bug…

    來自日本 回復(fù)
    1. 是的,feed 1是在假設(shè)有bug,用今日頭條的截圖也是讓大家從開篇就明確feed流是指哪一類產(chǎn)品~

      來自廣東 回復(fù)
  4. 我看了很多遍,你說的feed1的BUG到底在哪里···?

    來自廣東 回復(fù)
    1. 是在假設(shè)有bug哈,沒找到今日頭條真正有bug的界面,下次我來真正構(gòu)建一個(gè)bug界面,讓大家更清楚。

      回復(fù)