لقد شاركت مؤخرًا في تطوير مشروع ، وبما أن المشروع هو تطبيق عميل Fat (RIA) القائم على المتصفح ، فهناك الكثير من الإطارات في الصفحة. وجدت الاختبارات اللاحقة أن ذاكرة المتصفح كانت دائمًا عالية ، وكلما زادت صفحات iFrame التي تفتح ، زاد استخدام الذاكرة ، وهو أمر واضح بشكل خاص في متصفحات سلسلة IE. حتى لو تم إغلاق جميع صفحات IFRame المفتوحة ، فإن استخدام الذاكرة لم ينخفض بشكل كبير. يصبح متصفح IE عالقًا جدًا عندما يصل استخدام الذاكرة إلى حوالي 400 متر. وجد التحليل أنه لم يتم إصدار IFRAME ، لذلك تم إصدار الذاكرة التي تشغلها جميع الإطارات المغلقة. على الرغم من أنه لا يمكن إصداره بالكامل ، فإن استخدام ذاكرة IFRAME لن يستمر في النمو ، ويتم التحكم في استخدام الذاكرة للتطبيق بأكمله على ارتفاع 150 مترًا.
/** * قم بإنشاء iframe * @Param DOM بشكل ديناميكي إنشاء حاوية iframe ، أي إنشاء iframe في DOM. يمكن أن يكون DOM div أو الامتداد أو علامة أخرى. * param src page page path تم فتحه في iframe* param onload يتم تشغيل هذا الحدث بعد تحميل iframe ، والذي يمكن أن يكون فارغًا* return إرجاع كائن iframe الذي تم إنشاؤه*/function createiframe (dom ، src ، onload) {// إنشاء iframe في الوثيقة var iframe = docetelement. // قم بتعيين نمط iframe iframe.style.width = '100 ٪' ؛ iframe.style.height = '100 ٪' ؛ iframe.style.margin = '0' ؛ iframe.style.padding = '0' ؛ iframe.style.overflow = 'Hidden' ؛ iframe.style.border = 'none' ؛ // ربط حدث OnLoad لـ iframe if (onload && object.prototy.toString.call (onload) === '[وظيفة الكائن]') {if (iframe.attachevent) {iframe.attachevent ('Onload' ، Onload) ؛ } آخر إذا (iframe.addeventListener) {iframe.adDeventListener ('load' ، onload) ؛ } آخر {iframe.onload = onload ؛ }} iframe.src = src ؛ // تحميل iframe في dom.appendchild (iframe) ؛ إرجاع iframe ؛ } /*** تدمير iframe وأطلق الذاكرة التي يشغلها iframe. * param iframe كائن iframe الذي يجب تدميره*/وظيفة تدمير (iframe) {// قم بتوزيع iframe إلى صفحة فارغة ، والتي يمكن أن تحرر معظم الذاكرة. iframe.src = 'about: blank' ؛ حاول {iframe.contentWindow.document.write ('') ؛ iframe.contentwindow.document.clear () ؛ } catch (e) {} // إزالة iframe من الصفحة iframe.parentNode.removechild (iframe) ؛ }