Meta發(fā)布內(nèi)部開(kāi)發(fā)以增加網(wǎng)頁(yè)應(yīng)用程序穩(wěn)定性,大幅減少50%網(wǎng)頁(yè)OOM崩潰的JavaScript內(nèi)存泄露偵測(cè)工具M(jìn)emLab。MemLab為一個(gè)自動(dòng)偵測(cè)內(nèi)存泄露的JavaScript內(nèi)存測(cè)試框架,能夠找到并解決內(nèi)存泄露的根本原因,改善網(wǎng)頁(yè)應(yīng)用程序品質(zhì)提高用戶(hù)的使用體驗(yàn)。
Meta在2020年的時(shí)候,將Facebook.com重新設(shè)計(jì)成單頁(yè)應(yīng)用程序,而該應(yīng)用程序大部分的渲染和導(dǎo)航,皆使用客戶(hù)端JavaScript,同樣Meta也用類(lèi)似的架構(gòu)設(shè)計(jì)包括Instagram和Workplace等其他網(wǎng)頁(yè)應(yīng)用程序,但Meta提到,這種架構(gòu)雖然可以提供用戶(hù)更順暢的互動(dòng)體驗(yàn),使網(wǎng)頁(yè)更有應(yīng)用程序的感覺(jué),但在客戶(hù)端維護(hù)網(wǎng)頁(yè)應(yīng)用程序的狀態(tài),會(huì)讓管理客戶(hù)端內(nèi)存的工作變得復(fù)雜。
通常用戶(hù)可以立刻發(fā)現(xiàn)應(yīng)用程序的功能錯(cuò)誤或是性能問(wèn)題,而內(nèi)存泄露并不會(huì)被立刻發(fā)現(xiàn),但是會(huì)因?yàn)槊看握加靡粔K內(nèi)存,在累計(jì)之后,導(dǎo)致整個(gè)網(wǎng)頁(yè)應(yīng)用程序在后續(xù)逐漸變慢。
之前Meta分析Facebook.com的內(nèi)存使用,發(fā)現(xiàn)客戶(hù)端的內(nèi)存使用量,以及OOM崩潰的次數(shù),皆持續(xù)攀升,而根據(jù)他們的研究,高內(nèi)存使用量帶來(lái)許多負(fù)面影響,包括降低頁(yè)面加載和互動(dòng)性能,并且進(jìn)一步影響各項(xiàng)用戶(hù)參與指標(biāo)。
官方提到,事實(shí)上內(nèi)存泄露通常不明顯,因此也很難在開(kāi)發(fā)過(guò)程或程序代碼審查的時(shí)候被發(fā)現(xiàn),甚至很難在生產(chǎn)環(huán)境中找到根本原因,雖然主流的JavaScript Runtime都有垃圾回收器,但是內(nèi)存泄露仍可能存在,JavaScript程序代碼會(huì)因?yàn)殡[藏對(duì)象參照而出現(xiàn)內(nèi)存泄露,且會(huì)在許多意想不到的地方出現(xiàn)。
或是在部分情況下,以技術(shù)上來(lái)說(shuō)并不屬于內(nèi)存泄露,只是因?yàn)閼?yīng)用程序內(nèi)存使用線性增長(zhǎng)沒(méi)有被限制,Meta表示,這種情況最常發(fā)生的原因,是客戶(hù)端緩存沒(méi)有內(nèi)置驅(qū)逐邏輯,無(wú)限卷動(dòng)列表沒(méi)有虛擬化功能,因此無(wú)法在添加新內(nèi)容時(shí),從列表刪除較早的項(xiàng)目。
過(guò)去Meta并沒(méi)有自動(dòng)化系統(tǒng)和流程來(lái)控制內(nèi)存使用,因此要降低內(nèi)存使用和泄露,就只能定期請(qǐng)專(zhuān)家通過(guò)Chrome DevTools來(lái)挖掘內(nèi)存泄露的問(wèn)題,但因?yàn)楝F(xiàn)在應(yīng)用程序更改的次數(shù)非常頻繁,導(dǎo)致這個(gè)辦法沒(méi)有辦法擴(kuò)大規(guī)模執(zhí)行。
因此Meta創(chuàng)建了MemLab來(lái)解決這個(gè)問(wèn)題,JavaScript內(nèi)存測(cè)試框架MemLab能夠自動(dòng)進(jìn)行泄露偵測(cè),使開(kāi)發(fā)者更容易發(fā)現(xiàn)內(nèi)存泄露的根本原因,Meta成功控制失控的內(nèi)存增長(zhǎng)問(wèn)題,不只發(fā)現(xiàn)更多產(chǎn)品和基礎(chǔ)設(shè)施中內(nèi)存泄露的情況,也找到許多內(nèi)存優(yōu)化的機(jī)會(huì)。
現(xiàn)在Meta已經(jīng)在GitHub上開(kāi)源MemLab,并希望與JavaScript社群合作,而其他開(kāi)發(fā)者也已經(jīng)能夠下載MemLab,改進(jìn)應(yīng)用程序內(nèi)存使用。