Ich habe kürzlich an der Entwicklung eines Projekts teilgenommen, und da es sich bei dem Projekt um eine Browser-basierte Fat Client (RIA) -Anwendung handelt, gibt es auf der Seite viele IFrames. Spätere Tests ergaben, dass der Browserspeicher immer hoch war und je mehr Iframe -Seiten er öffnet, desto größer ist die Speicherverwendung, was in den Browsern der IE -Serie besonders offensichtlich ist. Auch wenn alle offenen Iframe -Seiten geschlossen sind, ist die Speicherverwendung nicht wesentlich abgenommen. Der IE -Browser bleibt sehr festgefahren, wenn die Speicherverwendung etwa 400 m erreicht. Die Analyse ergab, dass der Iframe nicht veröffentlicht wurde, sodass der von allen geschlossene Iframes besetzte Speicher freigegeben wurde. Obwohl es nicht vollständig veröffentlicht werden kann, wird die Iframe -Speicherverwendung nicht weiter wachsen und die Speicherverwendung der gesamten Anwendung wird bei etwa 150 m gesteuert.
/** * Erstellen Sie dynamisch einen Iframe * @param DOM Erstellen Sie einen Iframe -Container. Erstellen Sie ein Iframe im DOM. Das DOM kann ein DIV, eine Spanne oder ein anderes Tag sein. * @param src webseitenpfad in iframe geöffnet* @param onload Dieses Ereignis wird ausgelöst, nachdem der Iframe geladen wurde. Dies kann leer sein. // Setzen Sie den Stil von 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'; // Binden des Onload -Ereignisses von iframe if (onload && object.prototype.toString.call (onload) === '[Objektfunktion]') {if (iframe.attachEvent) {iframe.attachEvent ('Onload', Onload); } else if (iframe.adDeVentListener) {iframe.addeventListener ('lad', onload); } else {iframe.onload = onload; }} iframe.src = src; // das iframe in Dom.AppendChild (iframe) laden; Iframe zurückgeben; } /*** Zerstören Sie den Iframe und geben Sie den von dem Iframe besetzten Speicher frei. * @param iframe Das Iframe -Objekt, das zerstört werden muss iframe.src = 'über: blank'; try {iframe.contentWindow.document.write (''); Iframe.ContentWindow.Document.Clear (); } catch (e) {} // Iframe von der Seite iframe.parentnode.removechild (iframe) entfernen; }