Rumah > Artikel > hujung hadapan web > Cara mencipta dan melepaskan memori yang diduduki oleh kemahiran iframe_javascript secara dinamik
Baru-baru ini mengambil bahagian dalam pembangunan projek Memandangkan projek itu adalah aplikasi klien kaya (RIA) berasaskan pelayar, sejumlah besar iframe dipanggil dalam halaman. Ujian kemudian mendapati bahawa memori pelayar kekal tinggi, dan lebih banyak halaman iframe dibuka, lebih besar penggunaan memori, terutamanya dalam pelayar siri IE. Walaupun semua halaman iframe terbuka ditutup, penggunaan memori tidak menurun dengan ketara pelayar IE menjadi sangat tersekat apabila penggunaan memori mencapai kira-kira 400M. Analisis mendapati bahawa masalah itu disebabkan oleh iframe tidak dikeluarkan, jadi memori yang diduduki oleh semua iframe tertutup telah dikeluarkan Walaupun ia tidak dapat dikeluarkan sepenuhnya, penggunaan memori iframe tidak akan terus berkembang, dan penggunaan memori keseluruhan aplikasi dikawal pada sekitar 150M.
/** * 动态创建iframe * @param dom 创建iframe的容器,即在dom中创建iframe。dom可以是div、span或者其他标签。 * @param src iframe中打开的网页路径 * @param onload iframe加载完后触发该事件,可以为空 * @return 返回创建的iframe对象 */ function createIframe(dom, src, onload){ //在document中创建iframe var iframe = document.createElement("iframe"); //设置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'; //绑定iframe的onload事件 if(onload && Object.prototype.toString.call(onload) === '[object Function]'){ if(iframe.attachEvent){ iframe.attachEvent('onload', onload); }else if(iframe.addEventListener){ iframe.addEventListener('load', onload); }else{ iframe.onload = onload; } } iframe.src = src; //把iframe加载到dom下面 dom.appendChild(iframe); return iframe; } /** * 销毁iframe,释放iframe所占用的内存。 * @param iframe 需要销毁的iframe对象 */ function destroyIframe(iframe){ //把iframe指向空白页面,这样可以释放大部分内存。 iframe.src = 'about:blank'; try{ iframe.contentWindow.document.write(''); iframe.contentWindow.document.clear(); }catch(e){} //把iframe从页面移除 iframe.parentNode.removeChild(iframe); }