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

10 評論 4957 瀏覽 31 收藏 8 分鐘

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

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

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

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

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

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

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

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

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

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

這種最直觀也最簡單:

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

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

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

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

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

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

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

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

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

三、重用機制

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

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

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

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

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

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

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

還是用包包舉例:

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

當你想擁有Chanel包包時,這時因為LV包包是最先買的,所以會把LV包包改裝成Chanel包包,現(xiàn)在柜子里就變成:Gucci、PRADA、Chanel這三個包包。

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

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

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

 

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

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

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

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

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

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

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

      回復
  2. 內(nèi)容真的很不錯 學習了!~

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

      回復
  3. 可能是在假設有bug…

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

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

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

      回復