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