Facebook адкрыў код фрэймворка для выяўлення ўцечак памяці ў JavaScript

Кампанія Facebook (забаронена ў РФ) адкрыла зыходныя тэксты інструментара memlab, прызначанага для аналізу зрэзаў стану дынамічна размяркоўванай памяці (кучы), вызначэнні стратэгіі аптымізацыі працы з памяццю і выяўленні ўцечак памяці, якія ўзнікаюць пры выкананні кода на мове JavaScript. Код адчынены пад ліцэнзіяй MIT.

Фрэймворк быў створаны для разбору прычын вялікага спажывання памяці пры працы з web-сайтамі і web-прыкладаннямі. Напрыклад, з дапамогай memlab праводзіўся аналіз спажывання памяці пры выкарыстанні новай версіі сайта Facebook.com, які дазволіў выявіць уцечкі, якія прыводзілі да аварыйнага завяршэння браўзэра на баку кліента з-за вычарпання вольнай памяці.

Прычынамі ўцечак памяці пры выкананні JavaScript-кода можа быць наяўнасць утоеных спасылак на аб'екты, з-за якіх зборшчык смецця не можа вызваліць займаную аб'ектам памяць, неразумнае кэшаванне значэнняў або рэалізацыя бясконцай пракруткі без выцяснення старых элементаў спісу. Напрыклад у ніжэйпрыведзеным кодзе ў Chrome уцечка памяці ўзнікае з-за аб'екта "obj", нягледзячы на ​​тое, што яму прысвойваецца значэнне null, бо Chrome захоўвае ўнутраныя спасылкі на выводныя аб'екты для прадастаўлення магчымасці іх наступнага інспектавання ў web-кансолі. var obj = {}; console.log(obj); obj = null;

Асноўныя магчымасці memlab:

  • Выяўленне ўцечак памяці ў браўзэры. Memlab дазваляе аўтаматычна параўноўваць злепкі стану дынамічнай памяці, выяўляць уцечкі памяці і агрэгаваць вынікі.
  • Аб'ектна-арыентаваны API для перабору кучы, які дазваляе ўвасабляць уласныя алгарытмы выяўлення ўцечак і рэалізоўваць сістэмы аналізу злепкаў стану кучы. Падтрымліваецца аналіз кучы для браўзэраў на аснове рухавічка Chromium, а таксама для платформаў Node.js, Electron і Hermes.
  • Інтэрфейс каманднага радка і API для пошуку магчымасцяў па аптымізацыі выкарыстання памяці.
  • Сістэма assert-ов для Node.js, якая дазваляе ствараць unit-тэсты і выконваць праграмы на базе Node.js для стварэння зрэзаў уласнага стану, праверкі сваёй памяці ці напісанні пашыраных assert-праверак.

Крыніца: opennet.ru

Дадаць каментар