تصف هذه المقالة تسرب ذاكرة JavaScript ومهارات إدارة الذاكرة ، وهي عملية للغاية. شاركه للرجوع إليه. الطرق المحددة هي كما يلي:
محتوى هذه المقالة من Google WebPerf (Group WebPerf Group) ، 26 أغسطس 2014.
بشكل عام ، يجب أن تكون تطبيقات ويب JavaScript الفعالة سلسة وسريعة. يحتاج أي تطبيق يتفاعل مع المستخدمين إلى التفكير في كيفية التأكد من استخدام الذاكرة بكفاءة ، لأنه إذا تم استهلاكه أكثر من اللازم ، فإن الصفحة ستعطل ، مما يجبر المستخدم على إعادة التحميل. ويمكنك الاختباء فقط في الزاوية والبكاء.
جمع القمامة التلقائي ليس بديلاً لإدارة الذاكرة الفعالة ، وخاصة في تطبيقات الويب الكبيرة التي طويلة الأجل. في هذه المقالة ، سوف نوضح كيفية إدارة الذاكرة بفعالية من خلال DevTools Chrome.
وتعلم كيفية حل مشكلات الأداء مثل تسريبات الذاكرة ، وتوقف تجميع القمامة المتكرر ، والانتفاخات الشاملة للذاكرة ، وهي الأشياء التي تكلفك حقًا الطاقة.
يعرض Addy Osmani الكثير من الأمثلة في PPT التي سيؤدي إلى تسرب الذاكرة في Chrome V8:
1) حذف خاصية كائن لإبطاء هذا الكائن (استهلاك 15 مرة من الذاكرة)
var o = {x: 'y'} ؛ حذف الثور ؛ // في هذا الوقت ستصبح O ثورًا بطيئًا ؛ // var o = {x: 'y'} ؛ o = null ؛ // يجب أن يكون هذا2) الإغلاق
عند إدخال المتغيرات خارج الإغلاق في الإغلاق ، لا يمكن جمع هذا الكائن (GC) عندما ينتهي الإغلاق.
var a = function () {var largestr = new array (1000000). join ('x') ؛ الإرجاع وظيفة () {return largestr ؛ }} () ؛3) تسرب دوم
عند إزالة COM الأصلي ، لا يمكن إعادة تدوير مرجع العقدة الفرعية إذا لم تتم إزالته.
var select = document.queryselector ؛ var treeRef = select ('#tree') ؛ // في شجرة com ، LeafRef عبارة عن عقدة طفل لـ Treefre var leafref = select ('#leaf') ؛ var body = select ('body') ؛ body.removechild (treef) ؛ // لا يمكن سداد شجرة لأن treeRef لا يزال هناك // الحل: treeRef = null ؛ // لا يمكن سداد شجرة لأن LeafRef لا يزال هناك LeafRef = null ؛ // الآن يمكن إصدار #Tree.4) عد الموقت (تحديد) تسرب الموقت
الموقتات هي أيضًا أماكن شائعة تحدث فيها تسرب الذاكرة:
لـ (var i = 0 ؛ i <90000 ؛ i ++) {var buggyObject = {callagain: function () {var ref = this ؛ var val = setTimeOut (function () {ref.callagain () ؛} ، 90000) ؛ }} buggyobject.callagain () ؛ // على الرغم من أنك تريد إعادة التدوير ، إلا أن المؤقت لا يزال عربات التي تجرها الدواب = null ؛}5) تصحيح الذاكرة
يمكن لأداة تصحيح الأخطاء في الذاكرة الخاصة بـ Chrome عرض استخدام الذاكرة وتسرب الذاكرة بسهولة:
انقر فوق سجل في الجدول الزمني -> الذاكرة:
آمل أن يكون هذا المقال مفيدًا لتعلم برمجة JavaScript.