隨着互聯網技術以及軟硬件技術的快速發展,網絡已經成為人們生活中不可或缺的一部分,

在長期的互聯網沖浪中,網民對網絡信息的辨識度日益增進,

網絡信息提供方也必須與時俱進,抓住用戶的要害。


就拿我們淘寶的業務來看,幾年前看到最多的是以商品為維度分類、分層;

而現在,一切以人為中心,圍繞用戶做產品,幫助用戶挖掘消費區間,幫助用戶找到自己感興趣的東西

淘寶首頁就被拿出來開了一刀,作為淘寶的門戶,它承載了萬千入口,如何讓用戶直達興趣之地

 

那自然少不了千人千面地展現內容。今年淘寶首頁的改版,無處不散發個性化的味道:

 

 

首頁的內容運營不是一兩個人可以完成的,四五十個業務,每個業務又有很多子業務方向,

為了讓所有運營有序的在首頁編輯數據,主體采用 TMS 搭建,

目的是隔離模塊權限(當然,目前淘系也沒有比 TMS 更適合的平台來搭建首頁)。

 

 

為了滿足不同產品的需求,同時更好地展現產品特征,設計中采用了大量的色彩,如下圖所示:

 

多彩的模塊

 

同時也為業務提供了多套可供選擇的模板:

 

多套模板

 

在滿足業務需求的前提下,更重要的是以人為中心,把用戶喜歡的東西放到最醒目的位置。

如下圖「我常逛的」區塊,通過算法介入,打分排序,從業務池子中的幾十個模塊中選出四個

 

我常逛的

 

每個模塊中的很多數據都是通過個性化接口獲取的,並且為了提高運營的執行效率,需要前端實現以下功能:

  • 對於整個區塊,運營可以對業務置頂、排序
  • 對於區塊中的每個業務模塊,支持運營配置其版式,以及配置該模塊是否需要關閉個性化
  • 對於模塊中的每個數據坑位,支持運營干預是否需要個性化
  • 對於部分業務模塊,支持運營配置多條數據,然后算法決定出哪幾條
  • 而有部分業務,會采用自己的業務數據,該模塊的渲染則需要獨立處理

 

簡單而言,就是需要實現模塊的位置、模板、內容(或者部分內容)個性化,

同時對每個維度做開關控制。為了更好地告訴用戶自己的屬性,也會在導航上為用戶打標:

打標

 

設計也會有個性化的需求,如不同地域的人群展示不同的背景圖片 (深圳是地王大廈):

member 區域背景個性化

先記住一句話:「不能相信任何數據源」,數據源出來的數據偶爾出乎你的意料,

數據缺少條目、格式不對、狀態不對、回調不對等等。

 

從上面的個性化需求可以看出,前端面臨的問題還是不少的。

 

首先,數據的來源較多。 每個區塊采用的算法不一樣,所以每個區塊對應的數據接口也各不會相同,

並且一個模塊中,並不是所有數據都會走個性化接口,

還有一部分數據來自運營的手工填寫(運營手工填寫的內容,部分同步渲染,部分異步渲染)。

 

有些運營為了方便管理投放,如多個運營維護一個坑位的情況,會采用其他平台投放,

前端需要通過平台接口獲取數據;再加上部分業務有自己的后端服務,前端只能通過他們的后端接口獲取數據;

頁面上還有不少阿里媽媽的廣告,自然也是走他們的接口。約摸算來,整個首頁的數據接口不下於 15 個

 

大多數區塊的渲染,需要經歷兩次串行的請求 。

 

首先通過算法接口拿到需要展示的模塊 id 、模塊排序和模塊的個性化數據,

然后通過模塊 id 加載對應的非個性化數據(非個性化數據中包含了運營對個性化數據的干預邏輯),

合並兩個數據后才能渲染一個區塊。有人問:

 

  • 是不是可以並行請求兩者?答案是不能,業務模塊實在是太多了,如果把所有 id 的模塊數據都拿過來,數據太多。
  • 算法那邊是否可以將所有業務的數據都拿過去,然后只給前端傳輸整合后的數據?
  • 答案依然是不行,業務數據可能被實時修改,算法那邊同步是個問題,目前沒有較好的設施完成這套數據同步。
  • 是否可以讓算法的數據流過業務數據,將最后需要的數據過濾出來?答案是這很靠譜,然而這套體系還沒有完善,本次改版無緣用上。

 

第三個問題是,數據匹配問題

 

業務模塊有一個 id,這個 id 需要前端與后端約定好;

而業務的非個性化數據因為要異步加載,也有一個數據請求 id,這個 id 由 TMS 平台產生,

業務模塊較多,兩類 id 需要人肉匹配。在前后端的交互過程中,可能會出現如下問題:

  • 算法提供的數據 id 中有一個在前端這里找不到
  • 算法提供的數據存在重復/過少/過多
  • 算法提供的數據中某一項的數據格式不對

前端還有一個模板匹配的問題,為了保證數據的純潔性(其實是為了讓運營配置后台清爽),

光看業務數據是不知道該數據匹配哪種模板的,前端在區塊配置列表中還得加上模塊的模板 id,可以看看區塊的配置后台:

區塊配置后台

 

第四,也是一個讓人頭疼的問題,兜底容災的處理,對於單模塊單數據源的渲染,

容災是一件相當輕松的事情。而對於多模塊多數據源的容災處理,其邏輯的復雜程度超乎想象。

 

為了讓頁面能夠流暢地渲染,技術上下點功夫那是必須的!站在用戶體驗的角度去思考,其實很多問題都會迎刃而解

  • 首屏一定要快
  • 滾屏一定要流暢
  • 能不加載的先別加載
  • 能不執行的先別執行
  • 漸進展現、圓滑展現

在快的基礎上做到手感絲滑,需要優化的點有很多,下篇將給大家帶來 淘寶首頁的性能優化實踐