閑魚前端技術(shù)體系的背后——魔魚(良心推薦,從思路到實(shí)踐)
2023-01-25|23:20|發(fā)布在分類 / 跨境開店| 閱讀:85
2023-01-25|23:20|發(fā)布在分類 / 跨境開店| 閱讀:85
閑魚經(jīng)過(guò)近八年的發(fā)展,前端技術(shù)在整個(gè)研發(fā)體系中有著舉足輕重的地位,前端有迭代速度快,動(dòng)態(tài)化能力強(qiáng),跨端適配成本低等顯著優(yōu)勢(shì)。閑魚前端一直使用淘系提供的基礎(chǔ)技術(shù)和平臺(tái)工具,但隨著業(yè)務(wù)的不斷發(fā)展,逐漸無(wú)法滿足復(fù)雜、個(gè)性化的業(yè)務(wù)和技術(shù)環(huán)境。
工欲善其事,必先利其器,擁有自己的上層研發(fā)體系勢(shì)在必行,于是從去年下半年開始,前端開始著手代號(hào)為「魔魚」的技術(shù)體系建設(shè)。
魔魚
目前魔魚包含產(chǎn)研平臺(tái)、研發(fā)模式和網(wǎng)關(guān)建設(shè)三大部分。
產(chǎn)研平臺(tái)
閑魚原有的研發(fā)流程是在集團(tuán)提供的工程研發(fā)平臺(tái)上進(jìn)行的。大致流程如下:
可以看到原有的研發(fā)流程主要依賴于集團(tuán)研發(fā)平臺(tái)提供的基本能力,由于平臺(tái)定位問題,功能相對(duì)單一,很多問題還是需要團(tuán)隊(duì)自己想辦法解決:
腳手架及應(yīng)用配置問題
研發(fā)平臺(tái)提供應(yīng)用創(chuàng)建引導(dǎo),幫助初始化應(yīng)用工程Git倉(cāng)庫(kù)和腳手架代碼。但是這樣創(chuàng)建項(xiàng)目的缺點(diǎn)也非常明顯:
頁(yè)面管理問題
研發(fā)平臺(tái)只關(guān)注研發(fā)流程,而對(duì)應(yīng)用產(chǎn)物(頁(yè)面)的管理并不是它的強(qiáng)項(xiàng)。對(duì)于閑魚業(yè)務(wù)來(lái)說(shuō),研發(fā)構(gòu)建發(fā)布僅僅是開發(fā)同學(xué)要關(guān)心的,業(yè)務(wù)同學(xué)更關(guān)心頁(yè)面的管理及使用,所以衍生出了其他數(shù)據(jù)投放和管理配置平臺(tái),這樣的問題是:頁(yè)面發(fā)布和數(shù)據(jù)配置發(fā)布割裂,經(jīng)常因?yàn)閮蛇叞l(fā)布沒有同步,導(dǎo)致線上頁(yè)面和配置不一致造成故障。
補(bǔ)充一個(gè)魔魚平臺(tái)整體能力圖:
研發(fā)模式
之前閑魚的H5業(yè)務(wù)只有兩種研發(fā)模式可選:源碼開發(fā)和模塊搭建。復(fù)雜邏輯業(yè)務(wù)和產(chǎn)品鏈路以源碼開發(fā)為主;活動(dòng)和一些二級(jí)導(dǎo)購(gòu)頁(yè)面以模塊搭建為主。隨著業(yè)務(wù)復(fù)雜度提高、對(duì)性能體驗(yàn)要求的提升,需要擴(kuò)展研發(fā)模式,升級(jí)技術(shù)方案。
產(chǎn)品和運(yùn)營(yíng)結(jié)合
源碼開發(fā)的頁(yè)面一般以產(chǎn)品屬性為主,運(yùn)營(yíng)很少能介入這類頁(yè)面的配置和搭建。這類頁(yè)面如果要配合某些大促活動(dòng)增加一些運(yùn)營(yíng)屬性,需要額外的開發(fā)工作,并且當(dāng)活動(dòng)結(jié)束后,還要把這部分代碼刪除,否則容易產(chǎn)生冗余業(yè)務(wù)邏輯。
搭建的靈活性與體驗(yàn)性能的平衡
閑魚一直在使用集團(tuán)提供的通用搭建平臺(tái),它基于一套標(biāo)準(zhǔn)的模塊研發(fā)管理模式,并且提供整頁(yè)搭建的能力,但是這個(gè)平臺(tái)并不是為閑魚量身定制的,很多功能對(duì)于閑魚來(lái)說(shuō)過(guò)渡設(shè)計(jì),并且由于閑魚自建商品招選體系,導(dǎo)致在數(shù)據(jù)投放層面無(wú)法跟搭建平臺(tái)很好地融合,每個(gè)模塊需要內(nèi)置數(shù)據(jù)的獲取和處理邏輯,當(dāng)頁(yè)面模塊數(shù)量一多,頁(yè)面的體驗(yàn)性能會(huì)受到較大影響,而且內(nèi)置業(yè)務(wù)數(shù)據(jù)邏輯的模塊也很難復(fù)用。
源碼/搭建融合方案
這套方案彌補(bǔ)原有技術(shù)能力不足的問題,融合純?cè)创a、源碼搭建和純搭建,開發(fā)同學(xué)也不再需要做二選一的選擇題。
技術(shù)方案底層邏輯還是依賴集團(tuán)的模塊體系,這樣可以最大限度地利用已有組件物料,同時(shí)在模塊配置上,引入插槽(Slot)的自定義類型,結(jié)合編輯器,實(shí)現(xiàn)模塊靈活搭建,并且可以嵌套,讓模塊組合更加靈活。
基于模板的研發(fā)模式
以前應(yīng)用構(gòu)建的最終產(chǎn)物是 HTML/JS/CSS,現(xiàn)在產(chǎn)研平臺(tái)接管了應(yīng)用創(chuàng)建和配置管理等工作,文檔具有動(dòng)態(tài)化能力,最終產(chǎn)物是 XTPL/JS/CSS/Schema:
這種研發(fā)模式,除了上文提到了平臺(tái)可以接管頁(yè)面框架配置以外,還可以基于頁(yè)面模板創(chuàng)建多個(gè)頁(yè)面實(shí)例,實(shí)現(xiàn)一碼多頁(yè),并且每個(gè)頁(yè)面又具有獨(dú)立的搭投能力,應(yīng)用的靈活性有了大幅提升。
網(wǎng)關(guān)建設(shè)
在導(dǎo)購(gòu)和營(yíng)銷活動(dòng)、大促場(chǎng)景下,頁(yè)面數(shù)據(jù)基于運(yùn)營(yíng)配置,數(shù)據(jù)模型之間又有相互依賴關(guān)系,比如運(yùn)營(yíng)配置了一組選品id,需要發(fā)起二次請(qǐng)求來(lái)獲取這組選品id下對(duì)應(yīng)的商品數(shù)據(jù)。
在搭建場(chǎng)景下,模塊相對(duì)獨(dú)立,有完整的數(shù)據(jù)獲取及消費(fèi)邏輯,當(dāng)多個(gè)模塊搭建成一個(gè)頁(yè)面之后,每個(gè)模塊獨(dú)立處理數(shù)據(jù)獲取和渲染邏輯,導(dǎo)致模塊渲染時(shí)機(jī)不可預(yù)期,大量并行的請(qǐng)求也會(huì)導(dǎo)致請(qǐng)求阻塞。
首屏性能差
由于存在串行數(shù)據(jù)獲取的邏輯,頁(yè)面渲染時(shí)機(jī)延后,導(dǎo)致首屏渲染時(shí)間較長(zhǎng)。解決這類方案一般有以下幾種:
組件模塊復(fù)用率低
由于模塊需要負(fù)責(zé)數(shù)據(jù)獲取邏輯,數(shù)據(jù)跟業(yè)務(wù)的耦合度較高,導(dǎo)致開發(fā)了很多UI相同,數(shù)據(jù)依賴不同的模塊。這對(duì)UI組件復(fù)用和維護(hù)都不友好。
前端數(shù)據(jù)網(wǎng)關(guān)
為了解決首屏數(shù)據(jù)加載性能問題,針對(duì)導(dǎo)購(gòu)、營(yíng)銷場(chǎng)景,我們采用上面提到的實(shí)現(xiàn)一個(gè)輕量的網(wǎng)關(guān)的方案,順便聯(lián)合服務(wù)端,對(duì)現(xiàn)有閑魚通用數(shù)據(jù)模型進(jìn)行梳理及標(biāo)準(zhǔn)化制定。
動(dòng)態(tài)模板渲染
針對(duì)上文提到的動(dòng)態(tài)模板搭建的研發(fā)模式,我們接入集團(tuán)提供的動(dòng)態(tài)模板渲染引擎,當(dāng)運(yùn)營(yíng)在魔魚平臺(tái)編輯器完成頁(yè)面搭建、配置和發(fā)布之后,不需要前端介入開發(fā)就可以實(shí)現(xiàn)模塊JS/CSS資源的動(dòng)態(tài)注入,實(shí)現(xiàn)文檔的動(dòng)態(tài)配置渲染。
補(bǔ)充一個(gè)文檔和數(shù)據(jù)消費(fèi)鏈路圖:
魔魚現(xiàn)狀
將魔魚率先應(yīng)用到標(biāo)準(zhǔn)數(shù)據(jù)模型場(chǎng)景
無(wú)論商品和內(nèi)容都是相對(duì)容易標(biāo)準(zhǔn)化的數(shù)據(jù)模型,通過(guò)數(shù)據(jù)網(wǎng)關(guān)接入后可以快速得到數(shù)據(jù)性能優(yōu)化的收益;同時(shí)這類業(yè)務(wù)也是運(yùn)營(yíng)參與比較多,利用魔魚的研發(fā)、搭投一體化的體驗(yàn),提高研發(fā)效率和運(yùn)營(yíng)配置效率及體驗(yàn)。
業(yè)務(wù)遷移性能對(duì)比
以手機(jī)數(shù)碼頻道為例。這個(gè)頻道在遷移之前,首頁(yè)主要數(shù)據(jù)接口有2個(gè),并且是串行依賴關(guān)系;遷移到魔魚之后使用平臺(tái)數(shù)據(jù)配置投放,利用網(wǎng)關(guān)的數(shù)據(jù)召回能力,把數(shù)據(jù)接口合并成1個(gè)。
上線后數(shù)據(jù):
直觀效果對(duì)比:
改版前改版后
未來(lái)規(guī)劃
這個(gè)問題還有疑問的話,可以加幕.思.城火星老師免費(fèi)咨詢,微.信號(hào)是為: msc496。
推薦閱讀:
[淺規(guī)則Vol.1] 聽說(shuō)濫發(fā)信息的規(guī)則要變了
更多資訊請(qǐng)關(guān)注幕 思 城。
微信掃碼回復(fù)「666」
別默默看了 登錄\ 注冊(cè) 一起參與討論!