فیس بوک (ممنوع در فدراسیون روسیه) کد منبع ابزار memlab را باز کرده است که برای تجزیه و تحلیل برش هایی از وضعیت حافظه تخصیص یافته به صورت پویا (هیپ)، تعیین استراتژی هایی برای بهینه سازی مدیریت حافظه و شناسایی نشت حافظه که هنگام اجرای کد در آن رخ می دهد، طراحی شده است. جاوا اسکریپت. کد تحت مجوز MIT باز است.
این چارچوب برای تجزیه و تحلیل دلایل مصرف بالای حافظه هنگام کار با وب سایت ها و برنامه های کاربردی وب ایجاد شده است. به عنوان مثال، از memlab برای تجزیه و تحلیل مصرف حافظه در هنگام استفاده از نسخه جدید وب سایت Facebook.com استفاده شد که امکان شناسایی نشت هایی را که منجر به از کار افتادن مرورگر در سمت مشتری به دلیل فرسودگی حافظه آزاد می شد، ممکن ساخت.
دلایل نشت حافظه هنگام اجرای کد جاوا اسکریپت میتواند ارجاعات پنهان شیء باشد که مانع از آزاد کردن حافظه اشغال شده توسط جمعآورنده زباله، ذخیره غیرعاقلانه مقادیر، یا پیادهسازی اسکرول بینهایت بدون حذف عناصر لیست قدیمی میشود. به عنوان مثال، در کد زیر در کروم، یک نشت حافظه به دلیل شی "obj" رخ می دهد، با وجود این واقعیت که مقدار null به آن اختصاص داده شده است، زیرا کروم ارجاعات داخلی را به اشیاء خروجی برای بازرسی بعدی در کنسول وب ذخیره می کند. . var obj = {}; console.log(obj); obj = null;
ویژگی های اصلی memlab:
- تشخیص نشت حافظه در مرورگر Memlab به شما این امکان را می دهد که به طور خودکار عکس های فوری وضعیت حافظه پویا را مقایسه کنید، نشت حافظه را شناسایی کنید و نتایج را جمع آوری کنید.
- یک API شی گرا برای تکرار پشته، که به شما امکان می دهد الگوریتم های تشخیص نشت خود را پیاده سازی کنید و سیستم هایی را برای تجزیه و تحلیل عکس های فوری حالت پشته پیاده سازی کنید. تجزیه و تحلیل هیپ برای مرورگرهای مبتنی بر موتور کرومیوم و همچنین برای پلتفرم های Node.js، Electron و Hermes پشتیبانی می شود.
- رابط خط فرمان و API برای یافتن فرصت هایی برای بهینه سازی استفاده از حافظه.
- یک سیستم ادعایی برای Node.js که به شما امکان میدهد تستهای واحد ایجاد کنید و برنامههایی را بر اساس Node.js اجرا کنید تا برشهایی از وضعیت خود ایجاد کنید، حافظه خود را آزمایش کنید، یا چکهای ادعایی گسترده بنویسید.
منبع: opennet.ru