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