iframe动态创建及释放内存
近期參与一个项目的开发,因为项目是基于浏览器的胖client(RIA)应用程序,页面中大量调用iframe。后期測试发现浏览器内存一直居高不下,并且打开iframe页面越多内存占用越大。在IE系列浏览器中尤其明显。全部打开的iframe页面即使关闭了。内存使用也没有明显的下降。IE浏览器在内存占用达到400M左右就变得非常卡。分析发现是iframe没有释放造成的,于是对全部已关闭的iframe所占用的内存进行释放,尽管不能全然释放。可是iframe内存占用量不会一直增长,整个应用内存使用量控制在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);
}
iframe动态创建及释放内存的更多相关文章
- 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板
[源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...
- CF731C Socks并查集(森林),连边,贪心,森林遍历方式,动态开点释放内存
http://codeforces.com/problemset/problem/731/C 这个题的题意是..小明的妈妈给小明留下了n只袜子,给你一个大小为n的颜色序列c 代表第i只袜子的颜色,小明 ...
- DELPHI 动态 创建和释放 多个 EDIT 控件
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...
- Delphi动态创建组件,并释放内存
开发所用delphi版本是xe2,效果图如下: 代码如下: ---------------------------------------------------------------------- ...
- new和delete创建和释放动态数组
1.动态创建和释放一维数组 #include<iostream> using namespace std; int main() { int n; cin>>n; //分配动态 ...
- C/C++动态分配与释放内存的区别详细解析
以下是对C与C++中动态分配与释放内存的区别进行了详细的分析介绍,需要的朋友可以过来参考下 1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配 ...
- C++中new和delete来创建和释放动态数组
在C++编程中,使用new创建数组然后用delete来释放. 一.创建并释放一维数组 #include<iostream> using namespace std; int main() ...
- Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...
- 内存表 FDMemTable ClientDataSet CreateDataSet 动态创建字段
https://community.embarcadero.com/index.php/blogs/entry/firedac-in-memory-dataset-tfdmemtable Client ...
随机推荐
- sql server 实现sleep延时
sql server中实现与C++ 中Sleep类似的功能,可以使用 waitfor delay '00:00:00:10' 表示延时10毫秒
- c语言:链表排序, 链表反转
下面将实现链表排序的排序和遍历显示功能: 所定义的链表结构如下: head -> p1 -> p2 ->p3 ->....->pn; head的本身不作为数据节点,hea ...
- c#实现Javascript的encodeURIComponent()函数
原文 c#实现Javascript的encodeURIComponent()函数 国内外各搜索引擎,均用JavaScript的encodeURIComponent()函数对搜索关键字进行编码,终于找 ...
- Linux下sed,awk,grep,cut,find学习笔记
awk awk是一种程序语言,对文档资料的处理具有很强的功能.awk擅长从格式化报文或从一个大的文本文件中抽取数据. awk的命令格式为: awk [-F filed-separator] “comm ...
- Python笔记之面向对象
1.类和对象 #create a class class fruit: def say(self): print "hello, python" if __name__ == &q ...
- XFdtd 7.3.2发布增强生物电磁学中的核磁共振功能
XFdtd 日前发布7.3.2版,该版本主要针对生物电磁学中的核磁共振(MR)进行了功能增强,另外,也对软件的用户体验和计算性能进行了部分更新. XFdtd 是基于时域有限差分(FDTD)方法的全波三 ...
- Linux注销在线用户
与Windows系统类似,Linux系统上也有注销在线用户的方法,我们可以使用pkill命令,详细的步骤如下: . 首先使用w或who命令查看在线用户,确定用户所在TTY [root@iavp232 ...
- 1.1.5-学习Opencv与MFC混合编程之---画图工具 输入文字和填充图像 修改光标
源代码:http://download.csdn.net/detail/nuptboyzhb/3961696 输入文字 l 对话框 1. 插入,资源,选择对话框资源 2. 编辑对话框如下: ...
- Hadoop基于文件的数据结构及实例
基于文件的数据结构 两种文件格式: 1.SequenceFile 2.MapFile SequenceFile 1.SequenceFile文件是Hadoop用来存储二进制形式的<key,val ...
- [欧拉回路+手动开栈] poj 1780 Code
题目链接: http://poj.org/problem? id=1780 Code Time Limit: 1000MS Memory Limit: 65536K Total Submissio ...