- 浏览: 150078 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
caibinghong:
Ahua772 写道非常好,谢谢了,但是运行的图片怎么没有加载 ...
用于WebKit的CSS诀窍 -
Ahua772:
非常好,谢谢了,但是运行的图片怎么没有加载出来呢
用于WebKit的CSS诀窍 -
caibinghong:
呃是一个方法,现在改过来了,当时考的时候没有改!现在最底层是i ...
关于innerHTML 赋值问题 -
jayrao5566:
js的正确写法不是 .innerHTML = '<op ...
关于innerHTML 赋值问题 -
caibinghong:
在JQ与EXT里都解决的挺好的。http://caibingh ...
关于innerHTML 赋值问题
(转载)随着Ajax的发展,使用javascript的RIA应用越来越多,用户在同一页面中驻留的时间越来越长,内存泄露和内存占用问题越来越值得RIA开发者的注意,当RIA应用中内存得不到合理的释放,内存使用量会持续上涨,造成RIA应用反应变慢甚至会造成用户浏览器崩溃。虽然这种问题很少显现,但并不是说明应用中不存在这种问题,只不过这些问题在用户页面跳转和关闭浏览器时被掩盖掉,当我们RIA应用要用户一直在同一页面中操作时,这些问题就会显现出来,webQQ(http://web2.qq.com/)正是这样一个典型的应用。在这些问题中比较显著的一个就是iframe的内存泄露问题,由于iframe的引用页会占用相对大量的内存,如果iframe得不到释放,内存会明显的增长。
在webQQ中,QQ空间、QQ邮箱、腾讯微博等都是通过iframe的方式引入的,而这些引用都是可关闭的,如何做到关闭时释放iframe和引用页所占用的内存?下面通过一个例子来看看,会出现什么问题和如何解决这些问题。
问题1:
Html代码
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<TITLE>kjah.iteye.com</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
$=function(s){return document.getElementById(s)}
window.onload=function(){
var t=[];
var btn1=$('btn1'),btn2=$('btn2'),btn3=$('btn3');
btn1.onclick=function(){
if($('ifm1'))return;
var c=$('content');
var ifm=document.createElement('iframe');
ifm.src='http://www.sohu.com';
ifm.id='ifm1';
c.appendChild(ifm);
t.push(ifm);
}
btn2.onclick=function(){
var ifm=$('ifm1');
ifm.parentNode.removeChild(ifm);
}
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<input id="btn1" type="button" value="打开"/>
<input id="btn2" type="button" value="关闭"/>
<div id="content"></div>
<span style="color:#eee">http://kjah.iteye.com</span>
</BODY>
</HTML>
问题2
Html代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<TITLE>kjah.iteye.com</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
$=function(s){return document.getElementById(s)}
window.onload=function(){
//var t=[];
var btn1=$('btn1'),btn2=$('btn2'),btn3=$('btn3');
btn1.onclick=function(){
if($('ifm1'))return;
var c=$('content');
var ifm=document.createElement('iframe');
ifm.src='http://www.sohu.com';
ifm.id='ifm1';
c.appendChild(ifm);
//t.push(ifm);
}
btn2.onclick=function(){
var ifm=$('ifm1');
ifm.parentNode.removeChild(ifm);
}
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<input id="btn1" type="button" value="打开"/>
<input id="btn2" type="button" value="关闭"/>
<div id="content"></div>
<span style="color:#eee">http://kjah.iteye.com</span>
</BODY>
</HTML>
在较复杂的javascript RIA应用中,由于开发人员技术水平等原因,造成这种不能释放DOM对象的情况很容易发生,查找这些引用非常困难。好在一般的DOM对象占用内存较少,即使不能释放(这里不包括内存泄露的对象)内存增长也不会很明显。在这个例子中,把数组t和相关的处理去掉,再来看内存的增长情况,发现多次打开iframe不会出现内存的持续增长,但在关闭时也没有得到大量释放,只是在再次打开iframe时,内存没有继续增长,感觉是把iframe给缓存住了。
解决办法
如何解决iframe的内存占用与内存增长的情况?不管是iframe引用无法释放的问题,还是iframe缓存的问题,通过把iframe对象的src置空,释放iframec所引用的页面内容是一个行之有效的办法,虽然iframe还是没有释放,但是它所占用的内存已大部分被释放掉。
Html代码
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<TITLE>kjah.iteye.com</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
$=function(s){return document.getElementById(s)}
window.onload=function(){
var t=[];
var btn1=$('btn1'),btn2=$('btn2'),btn3=$('btn3');
btn1.onclick=function(){
if($('ifm1'))return;
var c=$('content');
var ifm=document.createElement('iframe');
ifm.src='http://www.sohu.com';
ifm.id='ifm1';
c.appendChild(ifm);
t.push(ifm);
}
btn2.onclick=function(){
var ifm=$('ifm1');
ifm.src="";
ifm.parentNode.removeChild(ifm);
}
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<input id="btn1" type="button" value="打开"/>
<input id="btn2" type="button" value="关闭"/>
<div id="content"></div>
<span style="color:#eee">http://kjah.iteye.com</span>
</BODY>
</HTML>
发表评论
-
gulp独立分文件夹打包
2018-12-27 09:04 1490dazi.91uu.net 是如何打包资源文件呢。 基本的 ... -
定义文档兼容性,让IE按指定的版本解析我们的页面
2013-10-19 11:00 884使用文档兼容性的方法比较容易,就是在我们要反馈给客户端的HT ... -
js 删除数组几种方法
2013-09-20 22:40 827var arr=['a','b ... -
减少图片请求,分批加载图片
2013-09-14 09:35 1243var lazyLoad = { Init: ... -
flash重复请求加载问题
2013-09-07 10:55 751flash重复请求加载问题 当一个div里头放一个f ... -
新一代 javascript 模板引擎 artTemplate ,使用中的问题
2013-09-06 15:44 1163artTemplate 新一代 javascript ... -
jQuery.event自定义事件机制-jQuery.event.special范例
2013-08-16 17:19 802什么时候要用到自定义函数?有些浏览器并不兼容某类型的事件, ... -
javascript对数组的操作
2013-07-30 14:32 8161. shift:删除原数组第一项,并返回删除元素的值;如 ... -
web应用的优化规则
2012-12-20 11:03 650中文 英文 1、 减少http请求 1、M ... -
如何提高网页的效率(上篇)——提高网页效率的14条准则
2012-12-20 10:29 684如何提高网页的效率(上篇)——提高网页效率的14条准则 ... -
nodeType常量与dom操作方法
2012-11-27 10:55 797接口 nodeType常量 ... -
responseXML为空?
2012-11-14 12:00 600responseXML为空? 这个问题困住我一个月多, ... -
javascript 面向对象写法
2012-07-15 22:58 831//原型方法 function ClassA(){ } C ... -
javascript 验证 国际格式 电话号码
2012-07-03 15:38 0如,中国国际代号是0086,我们要让外国人直接和我们联系表述如 ... -
使用Fiddler提高前端工作效率 (实例篇)
2012-06-08 08:54 868在上一篇(使用Fiddler提高前端工作效率 (介绍篇) ... -
使用Fiddler提高前端工作效率 (介绍篇)
2012-06-08 08:54 908http://www.kuqin.com/webp ... -
CSS实现星状评分效果 – CSS Star Rating
2012-05-17 11:32 2393CSS实现星状评分效果 – CSS Star Ratin ... -
移动平台WEB前端开发技巧汇总
2012-05-17 11:29 0原名《移动平台3G手机网站前端开发布局技巧汇总》,由武方 ... -
javascript 中的protoype的解释
2012-04-17 09:53 1010JavaScript prototype 的深度探索 ... -
前端技术系列课程(No.4) – 深入学习JavaScript语言
2012-04-16 08:34 809作为系列课程的第三讲,函谷担任此课的讲师,风趣幽默的 ...
相关推荐
Iframe 内存泄露分析是指在使用 Iframe 时,由于互相引用、闭包、跨页面泄漏、伪泄漏等原因,导致浏览器内存泄漏的问题。这种问题在 Ajax 盛行以前并不是什么大问题,因为都是通过页面跳转和刷新来进行与服务端的...
总的来说,解决IE浏览器IFrame内存不释放问题的关键在于确保在窗口关闭前正确地清理IFrame对象,这通常涉及到对`src`属性的处理、`contentWindow`的清空以及从DOM中移除IFrame元素。通过编写适当的JavaScript代码并...
本文将探讨如何动态创建`iframe`以及如何有效地释放其占用的内存。 首先,我们来看如何动态创建`iframe`。动态创建`iframe`的方法通常是通过JavaScript来完成的,这样可以在需要时创建,不需要时销毁,以减少不必要...
### 关闭EasyUI的Tab并释放Iframe内存的方法 #### 背景介绍 在使用EasyUI框架开发Web应用程序时,经常会用到`Tabs`组件。`Tabs`组件允许用户在一个容器内创建多个标签页,每个标签页可以独立加载不同的内容。其中一...
本篇文章将深入探讨两个关键知识点:`iframe`跨域问题以及`iframe`页面的自适应。 一、`iframe`跨域问题 跨域是Web开发中的一个重要概念,它限制了浏览器从一个源获取另一个源的资源,以保护用户的安全。当`iframe...
"再谈iframe自适应高度"这个主题,关注的是如何使iframe的内容区域根据所加载页面的高度自动调整,以避免滚动条出现或者内容被截断的问题。在网页设计中,尤其是在构建响应式布局时,这是一个非常关键的优化点。 1....
3. **iframe跨域问题**:当iframe加载的页面与包含它的页面不在同一个域时,就会出现跨域问题,导致无法直接通过JavaScript进行通信,如获取iframe内的内容、设置iframe的属性等。 **二、iframe跨域的解决方案** 1...
"iframe去边框问题"主要涉及如何去除这些边框,以实现更加整洁、无缝的集成效果。以下是一些关于解决`iframe`边框问题和一级边框设置的知识点: 1. **CSS样式控制**: - `border`: 可以直接使用CSS的`border`属性...
通过对上述知识点的学习,我们可以更加灵活地利用JavaScript来处理`iframe`中的各种问题,包括但不限于访问、修改`iframe`内部元素、提交表单、调用方法以及触发事件等。这些技巧对于开发复杂的Web应用来说是非常...
在提供的压缩包文件 "iframe中fixed失效问题" 中,可能包含了具体的代码示例或演示页面,你可以直接打开查看这些案例,以更好地理解和应用上述解决方案。实际操作时,需要根据具体项目需求和限制选择合适的方法,...
然而,`<iframe>`的高度自适应问题常常困扰着开发者,尤其是当`<iframe>`内部的内容动态加载或者变化时,如何让`<iframe>`自动调整其高度以适应内容,而不会导致滚动条溢出或内容被截断,成为了一个常见需求。...
在网页设计中,下拉菜单经常用于实现导航或者选项选择,但当这些菜单位于一个`iframe`元素内部时,可能会遇到被`iframe`遮挡的问题。这个问题主要涉及到浏览器的层叠上下文(CSS Z-Index)和`iframe`的渲染机制。...
本文将详细讲解如何利用IFrame解决这些问题,特别是针对Flex菜单的遮挡问题。 首先,理解Flex和IFrame的基本概念是必要的。Flex是一种基于ActionScript和MXML的开源框架,用于构建富互联网应用程序(RIA)。而...
在网页开发中,`iframe`(Inline Frame)是一种嵌入式框架,用于在单个HTML文档中嵌入另一个HTML文档。这种技术常被用来实现页面的分层展示、...同时,要时刻注意同源策略和跨域安全问题,确保代码的稳定性和安全性。
在使用easyui框架开发Web应用时,特别是在使用tab布局的时候,开发者可能会遇到页面内容被放置在iframe中时,页面多次加载的问题。这种情况尤其会在使用easyui的tab布局时发生,因为easyui会默认加载所有tab的内容,...
内容概要:以vue2为例,搭建一个...2、使用position: fixed解决iframe的弹窗及遮罩层问题 3、使用requestFullscreen()解决iframe里的全屏问题 4、使用history解决浏览器的后退问题 5、页面刷新,iframe可以加载正确页面
然而,由于浏览器的同源策略限制,当`iframe`加载的页面与包含它的页面不在同一个域名下时,就会遇到跨域问题。这篇博客将深入探讨如何解决`iframe`的跨域问题。 首先,理解同源策略是至关重要的。同源策略是浏览器...
然而,在处理多个iframe交互时,可能会遇到一个棘手的问题——双iframe互相刷新进入死循环。这个问题通常发生在两个或多个iframe之间尝试通过JavaScript互相重载对方,导致无限循环,严重影响用户体验并可能导致...