Maison  >  Article  >  interface Web  >  Comment créer et libérer dynamiquement la mémoire occupée par les compétences iframe_javascript

Comment créer et libérer dynamiquement la mémoire occupée par les compétences iframe_javascript

WBOY
WBOYoriginal
2016-05-16 16:37:501715parcourir

Récemment participé au développement d'un projet Étant donné que le projet est une application client riche (RIA) basée sur un navigateur, un grand nombre d'iframes sont appelées dans la page. Des tests ultérieurs ont révélé que la mémoire du navigateur est restée élevée et que plus les pages iframe sont ouvertes, plus l'utilisation de la mémoire est importante, en particulier dans les navigateurs de la série IE. Même si toutes les pages iframe ouvertes sont fermées, l'utilisation de la mémoire ne diminue pas de manière significative. Le navigateur IE devient très bloqué lorsque l'utilisation de la mémoire atteint environ 400 Mo. L'analyse a révélé que le problème était dû au fait que l'iframe n'était pas libérée, de sorte que la mémoire occupée par toutes les iframes fermées a été libérée. Bien qu'elle ne puisse pas être complètement libérée, l'utilisation de la mémoire de l'iframe ne continuerait pas à augmenter, ainsi que l'utilisation de la mémoire de. l'ensemble de l'application était contrôlé à environ 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); 
}

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn