Heim  >  Artikel  >  Web-Frontend  >  Lösung für das Speicherleckproblem bei Verwendung von jQuery zum Zurücksetzen der Iframe-Adresse unter IE_jquery

Lösung für das Speicherleckproblem bei Verwendung von jQuery zum Zurücksetzen der Iframe-Adresse unter IE_jquery

WBOY
WBOYOriginal
2016-05-16 16:15:281294Durchsuche

Auf der Seite befindet sich ein Iframe:

Code kopieren Der Code lautet wie folgt:



Der Inhalt einer.html ist wie folgt:

Code kopieren Der Code lautet wie folgt:





Titel hier einfügen


.hack{
/* 1. Gültig in allen Browsern */
Hintergrundfarbe:grün;
/* 2. IE8~IE10, Opera ist gültig, aber die Opera-Kompatibilität kann ignoriert werden */
Hintergrundfarbe:blau /* 3. IE9~IE10 sind gültig, kombiniert mit 2, schreiben Sie zuerst das für IE8 in 2, und in diesem Artikel ist es für IE9|IE10 */
Hintergrundfarbe:rot9 /* 4. IE7 ist gültig und kann in Kombination mit 23 IE7/IE8/(IE9|IE10) */
unterscheiden Hintergrundfarbe:gelb;
}
/* Für IE10 */
@media screen und (-ms-high-contrast: aktiv), (-ms-high-contrast: keine) {
.hack{
Hintergrundfarbe:rosa;
}
}






Das Suffix „9“ gilt für IE6/IE7/IE8/IE9/IE10 Suffix" Zusatz „9 Das Präfix „*“ gilt für IE7

Das Präfix „ “ gilt für IE7
Selektorpräfix @media screen und (-ms-high-contrast: aktiv), (-ms-high-contrast: keine)

Gültig für IE10


Code kopieren

Der Code lautet wie folgt:



SPAN




Der Inhalt von b.html lautet wie folgt:


Code kopieren


Titel hier einfügen



SPAN





Im Internet kursiert das Gerücht, dass die folgende Schreibmethode Speicherlecks reduzieren kann:

Code kopieren

Der Code lautet wie folgt: var frameDom = $('iframe:eq(0)')[0]; var frameWin = frameDom.contentWindow;
versuche es{
frameWin.document.write('');
frameWin.document.clear();
}catch(e){};
frameDom.src = 'b.html';



Was ist also der Effekt?
Schreibmethode eins: URL direkt festlegen

Code kopieren

Der Code lautet wie folgt:

var flag = true;
var frameDom = $('iframe:eq(0)')[0];
$('button').on('click',function(){
if(flag){
var frameDom = $('iframe:eq(0)')[0];
var frameWin = frameDom.contentWindow;
/*
Versuchen Sie es{
frameWin.document.write('');
frameWin.document.clear();
}catch(e){};
*/
frameDom.src = 'b.html';
flag = false;
}else{
var frameDom = $('iframe:eq(0)')[0];
var frameWin = frameDom.contentWindow;
/*
Versuchen Sie es{
frameWin.document.write('');
frameWin.document.clear();
}catch(e){};
*/
frameDom.src = 'a.html';
flag = true;
}
//$('#console').append(flag ? 'Switch to a.html': 'Switch to b.html');
});

Test mit SIEVE: #Leaks erhöht sich bei jedem Wechsel um etwa 28.

Schreibmethode 2: Online-Schreibmethode

Code kopieren Der Code lautet wie folgt:

<script><br> var flag = true;<br> var frameDom = $('iframe:eq(0)')[0];<br> $('button').on('click',function(){<br> if(flag){<br>       var frameDom = $('iframe:eq(0)')[0];<br> var frameWin = frameDom.contentWindow;<br>         Versuchen Sie es{ <br> frameWin.document.write(''); <br> frameWin.document.clear(); <br>         }catch(e){}; frameDom.src = 'b.html';<br> flag = false;<br> }else{<br>       var frameDom = $('iframe:eq(0)')[0];<br> var frameWin = frameDom.contentWindow;<br>         Versuchen Sie es{ <br> frameWin.document.write(''); <br> frameWin.document.clear(); <br>         }catch(e){}; frameDom.src = 'a.html';<br> flag = true;<br> }<br> //$('#console').append(flag ? 'Switch to a.html': 'Switch to b.html');<br> });<br> </script>


Test mit SIEVE: #Leaks erhöht sich bei jedem Wechsel um etwa 28. Es gibt keinen Unterschied zur Schreibweise

Schreibmethode drei:

var flag = true;
var frameDom = $('iframe:eq(0)')[0];
$('button').on('click',function(){
if(flag){
/*
Versuchen Sie es{
frameDom.contentWindow.document.write('');
frameDom.contentWindow.document.clear();
frameDom.contentWindow.close();
}catch(e){};
*/
​​​ $('iframe:eq(0)').remove();
$('body').append("");
flag = false;
}else{
/*
Versuchen Sie es{
frameDom.contentWindow.document.write('');
frameDom.contentWindow.document.clear();
frameDom.contentWindow.close();
}catch(e){};
*/
​​​ $('iframe:eq(0)').remove();
$('body').append("");
flag = true;
}
});

Unter Verwendung des Siebtests: Der durchschnittliche #Leckwert beträgt 3, was einen großen Unterschied zu den ersten beiden darstellt

Schreibmethode 4: Beachten Sie, dass in Methode 3 ein Codeabschnitt kommentiert wird. Was passiert, wenn Sie den Kommentar entfernen?

Code kopieren Der Code lautet wie folgt:

var flag = true;
var frameDom = $('iframe:eq(0)')[0];
$('button').on('click',function(){
if(flag){
Versuchen Sie es{
frameDom.contentWindow.document.write('');
frameDom.contentWindow.document.clear();
frameDom.contentWindow.close();
}catch(e){};
​​​ $('iframe:eq(0)').remove();
$('body').append("");
flag = false;
}else{
Versuchen Sie es{
frameDom.contentWindow.document.write('');
frameDom.contentWindow.document.clear();
frameDom.contentWindow.close();
}catch(e){};
​​​ $('iframe:eq(0)').remove();
$('body').append("");
flag = true;
}
});

Es gibt keinen offensichtlichen Unterschied zwischen dieser Schreibmethode und Schreibmethode 3. #Leaks erhöht sich bei jedem Wechsel immer noch um etwa 3

Daraus lässt sich schließen, dass der beste Weg, den Speicherverlust beim Zurücksetzen der Iframe-Adresse zu beheben, darin besteht, sie zu löschen und eine weitere hinzuzufügen!

Die Online-Übertragung ist möglicherweise nicht zuverlässig

Hinweis: Die lokale Testumgebung ist WIN7 x64 IE9

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn