`
hbxflihua
  • 浏览: 691273 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jquery 结合iframe造成内存泄露

阅读更多

系统通过iframe载入一个子页面,来模拟窗口、多页面等。系统中使用了大量js代码,为简化操作,使用了jQuery框架,使用一段时间后,发现内存泄漏很严重。尤其是页面回传后,内存消耗更是直线上升,为此,我通过各种办法防止内存泄漏,但测试结果却发现,导致内存泄漏的罪魁祸首居然是jquery!

测试方法如下:

首先是一个jq_frame.html页面

<html>
<head>
<title>jQuery 的 frame.html</title>
<script type="text/javascript" src="jquery-1.6.4.min.js"></script>
<script>	
	$(function(){
		$('a').click(function(){
			$(this).attr('href','jq_main.html');
		});
	});
	
</script>
</head>
<body>	
	<div style="border:1px solid red; width:200px;height:200px;display:inline;">
		<a href="main.html"  target="content" >click me!!!</a>
	</div>
	<iframe name="content" id="content" src="jq_main.html" />
</body>
</html>

 在其中嵌入iframe引用jq_main.html,嵌入的页面代码如下:

<html>
<head>
<title>jQuery的main.html</title>
<script type="text/javascript" src="jquery-1.6.4.min.js"></script>
<script type="text/javascript">
$(function(){
	alert('click me!');
	
	$('#btn').click(function(){
		alert('click me!');
	});
});
</script>
</head>

<body>
	<input type="button" value="ces" id="btn" >
</body>
</html>

 

在sIEve中测试,自动刷新并没有内存泄露,但手动去触发则内存泄露比较严重。

 

如果将jQuery代码换成普通的javascript代码,则不会出现内存泄露的情况。测试页面代码如下:

 

<html>
<head>
<title>javascript的frame.html</title>
</head>
<body>	
	<div style="border:1px solid red; width:200px;height:200px;display:inline;">
		<a href="main.html"  target="content" >click me!!!</a>
	</div>
	<iframe name="content" id="content" src="main.html" />
</body>
</html>

 

<html>
<head>
<title>javascript的main.html</title>
<script type="text/javascript">
        function clickMe(){
	alert('click me!!');
   }
</script>
</head>
<body onload="clickMe()">
	<input type="button" value="ces" id="btn"   onclick="clickMe()">
</body>
</html>

 

 

这里貌似内存泄露应归罪于jQuery,但页面独立使用jQuery是不会存在此类问题的。比如下面的独立页面。代码如下:

<html>   
    <head>   
        <meta content="text/html;charset=utf-8" http-equiv="content-type" />   
        <script src="jquery-1.4.4.min.js" type="text/javascript">   
        </script>   
        <style type="text/css">   
            #inner {    
                margin:0 auto;    
                width:150px;    
                height:50px;    
                border:1px solid green;    
            }    
        </style>   
        <script type="text/javascript">   
        $(function(){    
            $("#inner").click(function(){                   
				$('#test').append($('<p>test001</p>'));
                //$("#test").empty();    
            });    
                
        });    
        </script>   
        <title>jQuery内存泄露测试</title>   
    </head>   
    <body>   
        <div style="height:500px;width:500px;border:1px solid red;padding-top:100px;" id="test">   
            <div id="inner">click to remove me</div>   
        </div>        
    </body>   
</html>  

 

分享到:
评论
3 楼 feipigzi 2012-07-19  
benjaminz 写道
请问,您最后解决这个问题了吗?就是不使用原生javascript,只使用jquery的时候

http://my.oschina.net/jsan/blog/11169
2 楼 hbxflihua 2011-11-01  
问题可以这样解决:
在使用iframe时先将iframe对象做清空处理。
参考代码如下:
function openLM(url){
var el = document.getElementById('contentshow'),
        iframe = el.contentWindow;
    if(el){
        el.src = 'about:blank';
        try{
            iframe.document.write('');
            iframe.document.clear();
        }catch(e){};
        //以上可以清除大部分的内存和文档节点记录数了
    }
document.getElementById('contentshow').src = url;
}
1 楼 benjaminz 2011-11-01  
请问,您最后解决这个问题了吗?就是不使用原生javascript,只使用jquery的时候

相关推荐

    可以左右拖动的iframe框架

    同时,为了保证性能,需要合理处理事件绑定和解绑,避免内存泄漏和不必要的计算。 **安全性与隐私** 使用iframe时,需要考虑跨域策略(CORS)。由于同源策略的限制,iframe中的内容必须与包含它的页面在同一域下,...

    Jquery-1.6.2和jquery.form

    4. **事件绑定和解绑的优化**:`.bind()`, `.unbind()`, `.delegate()`, 和 `.undelegate()` 方法在这一版本中得到了优化,减少了内存泄漏的风险,并提升了事件处理的效率。 5. **插件兼容性**:jQuery 1.6.2确保了...

    收集记录一些使用Javascript,JQuery时遇到的问题

    博客中可能还包括了一些具体的例子、代码片段和解决方法,如使用`console.log()`进行调试、如何避免内存泄漏、以及如何有效地组合使用JavaScript和jQuery等。通过阅读和实践,你可以加深对这两种语言的理解,更好地...

    ASP.NET中几种有用的特效

    同时,性能分析工具(如ANTS Profiler)可以检测内存泄漏和性能瓶颈,确保应用程序在生产环境中稳定高效。 总之,ASP.NET提供了一系列工具和技术,让开发者能够创建富交互、高性能的Web应用,其中图片预览和在线...

    把PDF文件展示在前端页面

    总的来说,`touchpdf-master`压缩包提供了一个前端展示PDF的解决方案,通过解析PDF文件并在前端渲染,结合CSS定制样式和JavaScript实现交互,可以为用户提供无缝的在线阅读体验。在实际项目中,你需要根据具体需求...

Global site tag (gtag.js) - Google Analytics