Heim >Web-Frontend >js-Tutorial >So erstellen und geben Sie den durch iframe_javascript-Fähigkeiten belegten Speicher dynamisch frei
Kürzlich an der Entwicklung eines Projekts beteiligt. Da es sich bei dem Projekt um eine browserbasierte Rich-Client-Anwendung (RIA) handelt, werden auf der Seite viele Iframes aufgerufen. Spätere Tests ergaben, dass der Browserspeicher hoch geblieben ist und je mehr Iframe-Seiten geöffnet werden, desto höher ist der Speicherverbrauch, insbesondere in den Browsern der IE-Serie. Selbst wenn alle geöffneten Iframe-Seiten geschlossen werden, sinkt die Speichernutzung nicht wesentlich, wenn die Speichernutzung etwa 400 MB erreicht. Die Analyse ergab, dass das Problem dadurch verursacht wurde, dass der Iframe nicht freigegeben wurde, sodass der von allen geschlossenen Iframes belegte Speicher freigegeben wurde. Obwohl er nicht vollständig freigegeben werden konnte, wuchs die Speichernutzung des Iframes nicht weiter und die Speichernutzung von Die gesamte Anwendung wurde bei etwa 150 m kontrolliert.
/** * 动态创建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); }