关于ie内存泄漏详细信息就不说了,因为网上资料太多了,本地对象和js对象循环引用就会导致内存泄漏(貌似是因为本地对象和js对象的垃圾回收是由各自独立的引擎进行的,js引擎和DOM(COM)引擎),查看泄漏的工具也很多(这里有一些介绍:http://zivn.org/zivn/archives/tag/memory-leaks).
ie7做了改进,会释放绑定在dom上的js对象(在页面重新加载时),使得js的gc可以回收资源(已经形成的循环引用占用的资源在当前页面无法得到回收),引用一篇文章的话说是这样的(http://www.iteye.com/topic/301496):
"ie7的改进只是对于页面dom树上dom进行清除js引用,对于已经不在页面上但是还有js引用的ie7也是无能为力的
所以不能
LeakedDiv.parentElement.removeChild(LeakedDiv);
而要
LeakedDiv.expandoProperty=null;
LeakedDiv.parentElement.removeChild(LeakedDiv);
才可以,其实即使这样使用Drip看还是有5个引用在LeakedDiv上,是不是泄漏不好说了,目前看来,ie上面较好的办法就是先别用removeChild了"
上面的说法可以从以下代码得到验证(重复刷新页面,内存不会回收,注释掉div01.parentNode.removeChild(div01)重刷页面,内存回收了...IE6依然是死都不回收)
<div id="d01"><div id="d02">memoryTest</div></div>
<script type="text/javascript">
function memoryTest(){
var a=[];
for(var i=0;i<100000;i++){
a.push('a');
}
var div01=document.getElementById('d02');
div01.kk=function(){}; //此处产生一个闭包,此作用域资源得不到释放,divA不会销毁,循环引用产生
div01.parentNode.removeChild(div01);
}
memoryTest();
</script>
内存泄漏,还有一种情况,内存一直在涨,不回收,但是在最小化浏览器和刷新浏览器的时候,内存会回收一部分,我一直很诧异这个问题,内存泄漏怎么还能回收呢?
原来是这样的,分析:
这里div1.oo=obj2;obj2.oo=div1形成一个dom/js循环引用(dom引用图片资源,用滤镜方式),div1内存不会释放,滤镜如果没加载完,remove掉div1,滤镜不会消耗内存,如果滤镜已经加载完毕,则会消耗内存,关键在于此处,滤镜消耗的内存不会得到释放,但是在刷新浏览器和最小化浏览器时内存会得到释放.
猜测ie7 dom引擎渲染页面是这么做的,在最小化浏览器的时候ie7会遍历一下dom树,将不在dom树的图片资源清除出去,不管拥有图片资源的dom是否被引用,限于以滤镜方式加载的图片,以img src加载方式的图片复杂一些,刷新不会回收内存,但在最小化时会释放一部分内存
代码如下:
<body>
<input type="button" value="dom增大内存" onclick="domMemory()"/>
<input type="button" value="dom清除内存" onclick="clearMemory()"/>
</body>
<script>
//重复的创建销毁dom元素不会导致内存泄漏 或者 内存不回收
var dinAry=[];
var obj1={};
obj1.ary=[];
for(var i=0;i<10000;i++){
obj1.ary.push(i.toString());
}
function domMemory(){
for(var i=0;i<200;i++){
var div1=document.createElement("div");
var css1='width:200px;height:200px;filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src="img/a.png");"';
div1.style.cssText = css1;
div1.setAttribute("style",css1);
var obj2={};
div1.oo=obj2; //引用一个全局变量
obj2.oo=div1
document.body.appendChild(div1);
dinAry.push(div1);
// var fun1=function(){}
}
setTimeout(clearMemory,1000); //确保图片加载完成,否则不会占用内存
}
function clearMemory(){
var temp;
while(temp = dinAry.pop()){
document.body.removeChild(temp);
}
}
</script>
网名: 天堂左我往右
分享到:
相关推荐
这是因为IE浏览器会将图片资源缓存到内存中,即使图片元素已经被删除,只要其src属性仍然指向那个图片资源,内存就不会被释放。这种情况下,如果页面频繁地加载和卸载图片,内存占用会持续增长,导致性能下降,甚至...
4. 处理完Blob数据后,记得销毁不再使用的Blob对象,以防止内存泄漏。 总的来说,Blob.js是一个关键的兼容性工具,对于需要在IE浏览器中处理二进制数据的开发者来说是不可或缺的。理解Blob API和Blob.js的工作原理...
这包括内存管理,确保程序高效运行并避免内存泄漏;同时也要处理网络资源,如HTTP请求和响应、cookies等。C#中的Stream和StreamReader类可以用于读取网络数据,而HttpClient类则提供了异步的HTTP通信能力。 **网络...
5. **内存管理**:通过优化浏览器的内存占用,防止内存泄漏,确保浏览器在长时间使用后依然保持高效运行。 6. **安全与隐私保护**:虽然主要关注速度提升,但良好的加速工具也会考虑用户的安全与隐私,可能会包含...
- **内存管理**:在编辑器不再使用时,记得销毁实例以释放资源,防止内存泄漏。 6. **安全与隐私** - **XSS防护**:KindEditor提供了一些过滤和转义机制,以防止XSS攻击,但在实际应用中,开发者还需要结合后端...
- **内存管理和资源释放**:对于每个打开的选项卡,都需要有效地管理内存,防止内存泄漏,确保程序的长期运行。 - **URL解析和请求处理**:理解和实现HTTP/HTTPS协议,处理网络请求和响应。 - **安全性和隐私保护**...
- 定期清理连接,防止内存泄漏。 综上所述,DWR提供了一种有效的途径,使得即使在低版本的IE浏览器中,也能实现服务器推送和页面无刷新的数据实时获取。理解并熟练掌握DWR的原理和应用,对于开发高效、实时的Web...
8. **资源管理**:包括内存管理、文件操作等,源码需要合理地分配和释放资源,以避免内存泄漏等问题。 通过学习和分析易语言IE查看器源码,开发者可以提升在易语言环境下进行Web开发的能力,理解如何利用易语言与...
在Vue项目中,有时我们需要实现页面截屏并下载图片到本地的功能,特别是在处理用户...记得在完成截屏后释放URL对象,以避免内存泄漏。在实际开发过程中,可能还需要处理更多细节,如CSS样式兼容性、iframe内容截取等。
6. **内存管理**:有效地管理内存,避免内存泄漏。 7. **扩展功能**:可能包含书签管理、历史记录、隐私模式等功能。 总的来说,"模仿IE的多标签浏览器"项目是一个结合了网络通信、UI设计、安全性和性能优化的复杂...
5. **释放资源**:在完成截图后,记得释放Bitmap对象,避免内存泄漏。 ```csharp bitmap.Dispose(); ``` 在实际应用中,你可能需要根据具体需求对以上步骤进行调整,例如添加错误处理、调整截图尺寸、处理iframe等...
5. 清除定时器:在页面卸载或者用户不再需要滚动时,清除定时器以防止内存泄漏。 在实际应用中,需要注意以下几点: 1. 性能优化:避免一次性加载所有图片,可以使用懒加载技术,只在图片进入视口时才加载。 2. ...
14. **及时释放资源**:对于不再使用的对象,确保正确清理,避免内存泄漏。 15. **遵循最佳实践**:参考权威的Web性能优化指南,如Yahoo!的YSlow或Google的PageSpeed Insights,持续学习和改进。 通过上述方法,...
5. **内存泄漏检测**:对于JavaScript,内存泄漏是常见的性能杀手。 dynaTrace AJAX可以检测潜在的内存泄漏,帮助开发者修复这些问题,保持应用的长期稳定运行。 6. **用户体验指标**:除了技术指标外,工具还关注...
此外,为了防止内存泄漏,预览完成后应释放相关资源,如移除`img`元素或者重置其`src`属性。 在压缩包中的"JS图片上传预览"可能包含以下内容:一个或多个JavaScript文件,这些文件包含了实现上述功能的代码;可能...
- Firefox:注意一些可能导致内存泄漏的库或特性,如Prototype的Ajax。 - Opera:因其优秀的内存管理,通常表现出良好的性能。 通过上述优化,可以显著改善网页性能,减少对用户设备资源的占用。然而,网页优化是...
图片预加载是网页优化的一种策略,它通过提前加载图片资源,改善用户体验,特别是对于大量图片或者需要滚动加载的页面。本文将深入探讨预加载过程中的关键知识点,包括内存泄漏、动态图片处理、事件绑定顺序以及回调...