Meta釋出內部開發以增加網頁應用程式穩定性,大幅減少50%網頁OOM崩潰的JavaScript記憶體洩漏偵測工具MemLab。MemLab為一個自動偵測記憶體洩漏的JavaScript記憶體測試框架,能夠找到並解決記憶體洩漏的根本原因,改善網頁應用程式品質提高用戶的使用體驗。

Meta在2020年的時候,將Facebook.com重新設計成單頁應用程式,而該應用程式大部分的渲染和導航,皆使用客戶端JavaScript,同樣Meta也用類似的架構設計包括Instagram和Workplace等其他網頁應用程式,但Meta提到,這種架構雖然可以提供用戶更順暢的互動體驗,使網頁更有應用程式的感覺,但在客戶端維護網頁應用程式的狀態,會讓管理客戶端記憶體的工作變得複雜。

通常使用者可以立刻發現應用程式的功能錯誤或是效能問題,而記憶體洩漏並不會被立刻發現,但是會因為每次占用一塊記憶體,在累積之後,導致整個網頁應用程式在後續逐漸變慢。

之前Meta分析Facebook.com的記憶體使用,發現客戶端的記憶體使用量,以及OOM崩潰的次數,皆持續攀升,而根據他們的研究,高記憶體使用量帶來許多負面影響,包括降低頁面載入和互動效能,並且進一步影響各項用戶參與指標。

官方提到,事實上記憶體洩漏通常不明顯,因此也很難在開發過程或程式碼審查的時候被發現,甚至很難在生產環境中找到根本原因,雖然主流的JavaScript Runtime都有垃圾回收器,但是記憶體洩漏仍可能存在,JavaScript程式碼會因為隱藏物件參照而出現記憶體洩漏,且會在許多意想不到的地方出現。

或是在部分情況下,以技術上來說並不屬於記憶體洩漏,只是因為應用程式記憶體使用線性成長沒有被限制,Meta表示,這種情況最常發生的原因,是客戶端快取沒有內建驅逐邏輯,無限捲動列表沒有虛擬化功能,因此無法在添加新內容時,從列表刪除較早的項目。

過去Meta並沒有自動化系統和流程來控制記憶體使用,因此要降低記憶體使用和洩漏,就只能定期請專家透過Chrome DevTools來挖掘記憶體洩漏的問題,但因為現在應用程式更改的次數非常頻繁,導致這個辦法沒有辦法擴大規模執行。

因此Meta創建了MemLab來解決這個問題,JavaScript記憶體測試框架MemLab能夠自動進行洩漏偵測,使開發者更容易發現記憶體洩漏的根本原因,Meta成功控制失控的記憶體成長問題,不只發現更多產品和基礎設施中記憶體洩漏的情況,也找到許多記憶體最佳化的機會。

現在Meta已經在GitHub上開源MemLab,並希望與JavaScript社群合作,而其他開發者也已經能夠下載MemLab,改進應用程式記憶體使用。

熱門新聞

Advertisement