Intersection-Observer在可視化建站項(xiàng)目中的實(shí)戰(zhàn)與應(yīng)用

在可視化建站項(xiàng)目中程癌,基于架構(gòu)的原因斟览,所有組件像是樂(lè)高積木一樣,并沒(méi)有冗余在具體的頁(yè)面里汰蜘,通過(guò)運(yùn)營(yíng)配置的JSON去映射對(duì)應(yīng)的組件仇冯,所以對(duì)于單個(gè)組件的各項(xiàng)邏輯完全是無(wú)法預(yù)知的,使用項(xiàng)目中廣泛使用的baselist進(jìn)行加載鉴扫,ImprLogger進(jìn)行曝光埋點(diǎn)的做法就完全不可取了赞枕,因?yàn)樗麄兊某跏蓟枰芏鄥?shù)澈缺,而我們無(wú)法預(yù)知這些參數(shù)坪创,也不能將這些參數(shù)轉(zhuǎn)交給頁(yè)面搭建人員去輸入,因此我們使用了Intersection-Observer這一功能強(qiáng)大的api姐赡,用單一職責(zé)的模式設(shè)計(jì)了很多組件莱预,每個(gè)組件保證一個(gè)功能,雖然功能單一项滑,但是裝載在業(yè)務(wù)組件里依沮,就好像普通的業(yè)務(wù)組件多了左膀右臂,很輕松的增加了各種功能枪狂,而不是在傳統(tǒng)開(kāi)發(fā)中危喉,使用功能強(qiáng)大復(fù)雜的baselist托管一切,通過(guò)復(fù)雜的配置項(xiàng)去驅(qū)動(dòng)州疾,通過(guò)生命周期調(diào)用不同方法來(lái)解決bug辜限。

  • 曝光埋點(diǎn)是指在商品或廣告進(jìn)入視口后,發(fā)送給后端這個(gè)商品的相關(guān)信息的一種行為严蓖,在大家的業(yè)務(wù)中非常常見(jiàn)薄嫡,在我的開(kāi)發(fā)體驗(yàn)中應(yīng)該是遇到bug最多的點(diǎn),大家或多或少會(huì)出現(xiàn)下列的情況
  • 下拉加載是移動(dòng)端場(chǎng)景的分頁(yè)加載策略颗胡,后端接口設(shè)計(jì)成分頁(yè)的模型毫深,在滾動(dòng)到頁(yè)面底部時(shí)加載新的數(shù)據(jù)從而達(dá)到無(wú)限滾動(dòng)
  • 懶加載是移動(dòng)web性能優(yōu)化的常見(jiàn)手段,主要功能是在圖片進(jìn)入視口才進(jìn)行加載毒姨,未加載之前顯示占位圖哑蔫,圖片加載完成后顯示圖片

先看看之前開(kāi)發(fā)的痛點(diǎn)把!

  • 使用古老的BaseList2時(shí)弧呐,在BaseList2的開(kāi)發(fā)時(shí)闸迷,將埋點(diǎn)的邏輯直接冗余在列表中,后續(xù)的開(kāi)發(fā)中泉懦,將曝光埋點(diǎn)的方法抽離出來(lái)稿黍,提供幾個(gè)api,在BaseList2組件中進(jìn)行調(diào)用崩哩,但是Q睬颉Q糟濉!并沒(méi)有在原有BaseList2中將過(guò)去的方法刪去酣栈,于是會(huì)遇到兩個(gè)埋點(diǎn)沖突的情況险胰,傳入的props也有好多個(gè),在文檔匱乏的項(xiàng)目中簡(jiǎn)直難用矿筝!坑捌鸨恪!


    image.png
image.png
  • BaseList3是目前大家應(yīng)用比較廣泛受到好評(píng)的列表窖维,主要是它功能比較完善榆综,可以做很多邏輯,埋點(diǎn)封裝的很完全铸史,但是1谴!琳轿!他是采用繼承式的寫(xiě)法判沟,對(duì)一一個(gè)通用組件來(lái)講繼承式是api很不友好的,大家需要看源碼才能知道這個(gè)組件都有什么方法崭篡,而且不能開(kāi)箱即用挪哄,必須要繼承列表組件寫(xiě)一個(gè)自己的列表組件才可以使用.可以看到下圖,因?yàn)槁顸c(diǎn)方法抽出來(lái)了琉闪,比上面的強(qiáng)一點(diǎn)迹炼,可以直接調(diào)用曝光埋點(diǎn)的方法,但是還要寫(xiě)很多代碼塘偎。


    image.png

使用老代碼該如何曝光埋點(diǎn)呢疗涉,戲稱他為三部曲


image.png
  1. 在父組件初始化曝光器的單例
  2. 在列表組件對(duì)整塊要曝光的區(qū)域做注冊(cè)
  3. 每一個(gè)子組件都要把自己注冊(cè)進(jìn)步驟2中的曝光區(qū)塊對(duì)象中去

在考慮項(xiàng)目能不能使用IScroll或者寫(xiě)成類似react-infinite這種回收移出視口的列表組件時(shí),由于上述的埋點(diǎn)方法吟秩,只能停下腳步咱扣,而且有個(gè)坑!react組件渲染的聲明周期是 父組件willmount - 子組件 willmount - 子組件 didmount - 父組件didmount 這樣導(dǎo)致了步驟三會(huì)在沒(méi)有SSR的靜態(tài)頁(yè)面中出錯(cuò)涵防,因?yàn)楦改K還沒(méi)有didMount闹伪,子組件沒(méi)辦法注冊(cè)到父模塊中去。壮池。偏瓤。。椰憋。

遇到了這么多坑之后厅克,我寫(xiě)了一個(gè)baselistV4,妄圖通過(guò)api的封裝解決了上面的問(wèn)題橙依,把復(fù)雜的邏輯都隱藏在列表中证舟,但是頁(yè)面數(shù)據(jù)加載和埋點(diǎn)邏輯太多了硕旗,也只能涵蓋有限的情況

然后我遇到了Intersection-observer這個(gè)神奇的API,解決了上述問(wèn)題

基本介紹

應(yīng)用

  1. 曝光埋點(diǎn)
  2. 商品列表
  3. 懶加載
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末女责,一起剝皮案震驚了整個(gè)濱河市漆枚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抵知,老刑警劉巖墙基,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異刷喜,居然都是意外死亡残制,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)吱肌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痘拆,“玉大人,你說(shuō)我怎么就攤上這事氮墨。” “怎么了吐葵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵规揪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我温峭,道長(zhǎng)猛铅,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任凤藏,我火速辦了婚禮奸忽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揖庄。我一直安慰自己栗菜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蹄梢。 她就那樣靜靜地躺著疙筹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪禁炒。 梳的紋絲不亂的頭發(fā)上而咆,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音幕袱,去河邊找鬼暴备。 笑死,一個(gè)胖子當(dāng)著我的面吹牛们豌,可吹牛的內(nèi)容都是我干的涯捻。 我是一名探鬼主播阁危,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼汰瘫!你這毒婦竟也來(lái)了狂打?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤混弥,失蹤者是張志新(化名)和其女友劉穎趴乡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蝗拿,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晾捏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哀托。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惦辛。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仓手,靈堂內(nèi)的尸體忽然破棺而出胖齐,到底是詐尸還是另有隱情,我是刑警寧澤嗽冒,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布呀伙,位于F島的核電站,受9級(jí)特大地震影響添坊,放射性物質(zhì)發(fā)生泄漏剿另。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一贬蛙、第九天 我趴在偏房一處隱蔽的房頂上張望雨女。 院中可真熱鬧,春花似錦阳准、人聲如沸氛堕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喘批。三九已至汁政,卻和暖如春令漂,著一層夾襖步出監(jiān)牢的瞬間篮绿,已是汗流浹背硫朦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工文黎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留七冲,地道東北人痛倚。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像澜躺,于是被迫代替她去往敵國(guó)和親蝉稳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抒蚜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,135評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)耘戚,斷路器嗡髓,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 2017.6.6晚 回首間,今天已是我和伍先生結(jié)婚12年的紀(jì)念日收津,一個(gè)年輪已有余了饿这。 記得剛相戀的時(shí)候,我問(wèn)他:”...
    麗平悟生活閱讀 486評(píng)論 1 2
  • 成本擺在這里,如果某成品很便宜吻贿,建議繞道串结。 某兩款熱銷阿膠糕,分別添加了膠原蛋白粉和麥芽糊精舅列,具體效果不知肌割,但顯然...
    睿媽霞姐閱讀 826評(píng)論 0 0
  • 文 小河七七 清晨声功,窗外寧?kù)o,偶爾的幾聲飛鳥(niǎo)低鳴宠叼,在空曠的天空放縱。注定這是一次難忘的遇見(jiàn)其爵,就如四月這柔軟的風(fēng)冒冬,暖...
    小河七七閱讀 1,017評(píng)論 0 0