Penyelesaian kepada masalah kebocoran memori apabila menggunakan jQuery untuk menetapkan semula alamat iframe di bawah IE_jquery

WBOY
Lepaskan: 2016-05-16 16:15:28
asal
1317 orang telah melayarinya

Terdapat iframe dalam halaman:

Salin kod Kod adalah seperti berikut:


Uji kebocoran IFRAME

Kandungan a.html adalah seperti berikut:

Salin kod Kod adalah seperti berikut:





Sisipkan tajuk di sini


.godam{
/* 1. Sah pada semua pelayar */
warna latar:hijau;
/* 2. IE8~IE10, Opera sah, tetapi keserasian Opera boleh diabaikan */
warna latar belakang: biru /* 3. IE9~IE10 adalah sah, digabungkan dengan 2, mula-mula tulis satu untuk IE8 dalam 2, dan dalam artikel ini ia adalah untuk IE9|IE10 */
warna latar belakang: merah9 /* 4. IE7 adalah sah, dan digabungkan dengan 23 boleh membezakan IE7/IE8/(IE9|IE10) */
warna latar belakang:kuning;
}
/* Untuk IE10 */
@media skrin dan (-ms-high-contrast: aktif), (-ms-high-contrast: none) {
.godam{
warna latar belakang:merah jambu;
}
}






Akhiran "9" sah untuk IE6/IE7/IE8/IE9/IE10 akhiran" Akhiran "9 Awalan "*" adalah sah untuk IE7

Awalan " " sah untuk IE7
Awalan pemilih @skrin media dan (-ms-high-contrast: aktif), (-ms-high-contrast: none)

Sah untuk IE10


Salin kod

Kod adalah seperti berikut:



SPAN




Kandungan b.html adalah seperti berikut:


Salin kod


Sisipkan tajuk di sini



SPAN





Terdapat khabar angin di Internet bahawa kaedah penulisan berikut boleh mengurangkan kebocoran memori:

Salin kod

Kod adalah seperti berikut: var frameDom = $('iframe:eq(0)')[0]; var frameWin = frameDom.contentWindow;
cuba{
frameWin.document.write('');
frameWin.document.clear();
}tangkap(e){}; frameDom.src = 'b.html';



Jadi apakah kesannya?

Kaedah penulisan satu: tetapkan URL secara langsung

Salin kod

Kod adalah seperti berikut:

bendera var = benar;
var frameDom = $('iframe:eq(0)')[0];
$('butang').on('klik',fungsi(){
jika(bendera){
var frameDom = $('iframe:eq(0)')[0];
var frameWin = frameDom.contentWindow;
/*
Cuba{
frameWin.document.write('');
frameWin.document.clear();
}tangkap(e){}; */
frameDom.src = 'b.html';
bendera = palsu;
}lain{
var frameDom = $('iframe:eq(0)')[0];
var frameWin = frameDom.contentWindow;
/*
Cuba{
frameWin.document.write('');
frameWin.document.clear();
}tangkap(e){}; */
frameDom.src = 'a.html';
bendera = benar;
}
//$('#console').append(flag ? 'Tukar ke a.html': 'Tukar ke b.html');
});


Uji menggunakan sIEve: #kebocoran meningkat kira-kira 28 setiap kali anda bertukar.

Kaedah penulisan 2: Kaedah penulisan dalam talian

bendera var = benar;
var frameDom = $('iframe:eq(0)')[0];
$('butang').on('klik',fungsi(){
jika(bendera){
      var frameDom = $('iframe:eq(0)')[0];
var frameWin = frameDom.contentWindow;
        cuba{
frameWin.document.write('');
frameWin.document.clear();
        }tangkap(e){}; frameDom.src = 'b.html';
bendera = palsu;
}lain{
      var frameDom = $('iframe:eq(0)')[0];
var frameWin = frameDom.contentWindow;
        cuba{
frameWin.document.write('');
frameWin.document.clear();
        }tangkap(e){}; frameDom.src = 'a.html';
bendera = benar;
}
//$('#console').append(flag ? 'Tukar ke a.html': 'Tukar ke b.html');
});




Uji menggunakan sIEve: #kebocoran meningkat kira-kira 28 setiap kali anda bertukar. Tiada bezanya dengan cara penulisan

Kaedah penulisan tiga:

Salin kod

Kod adalah seperti berikut: bendera var = benar; var frameDom = $('iframe:eq(0)')[0];
$('butang').on('klik',fungsi(){
jika(bendera){
/*
Cuba{
frameDom.contentWindow.document.write('');
frameDom.contentWindow.document.clear(); frameDom.contentWindow.close();
}tangkap(e){};
*/
$('iframe:eq(0)').remove();
$('body').append("");
bendera = palsu;
}lain{
/*
Cuba{
​ frameDom.contentWindow.document.write(''); frameDom.contentWindow.document.clear(); frameDom.contentWindow.close();
}tangkap(e){};
*/
$('iframe:eq(0)').remove();
$('body').append("");
bendera = benar;
}
});

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

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan