当前位置: 首页 > news >正文

重庆便宜网站建设/国际新闻最新消息美国

重庆便宜网站建设,国际新闻最新消息美国,可以做物理试验的网站有哪些,wordpress防止图片被采集JS内存泄露 当我们用JS代码创建一个引用类型的时候(以下简称对象),JS引擎会在内存中开辟一块空间来存放数据,并把指针引用交给那个变量。内存是有限的,JS引擎必须保证当开辟的对象没用的时候,把所分配的内存…

JS内存泄露

当我们用JS代码创建一个引用类型的时候(以下简称对象),JS引擎会在内存中开辟一块空间来存放数据,并把指针引用交给那个变量。内存是有限的,JS引擎必须保证当开辟的对象没用的时候,把所分配的内存空间释放出来,这个过程叫做垃圾回收,负责回收的叫做垃圾回收器。

内存泄漏是指我们已经无法再通过JS代码来引用到某个对象,但垃圾回收器却认为这个对象还在被引用,因此在回收的时候不会释放它。导致了分配的这块内存永远也无法被释放出来。如果这样的情况越来越多,会导致内存不够用而系统崩溃。

以下几种情况会导致内存泄露

绑定事件没有移除

当页面中元素被移除或替换时,若元素绑定的事件仍没被移除,在IE中不会作出恰当处理,此时要先手工移除事件,不然会存在内存泄露。

下面这种情况,我们移除input元素之后,但其绑定的事件仍在,垃圾回收器会认为这个对象还是有用的,因此不会回收这个对象,这样就导致当初为这个对象分配的内存无法被释放。

<div id="myDiv"><input type="button" value="Click me" id="myBtn">
</div><script type="text/javascript">var btn = document.getElementById("myBtn");btn.onclick = function(){document.getElementById("myDiv").innerHTML = "Processing...";}
</script>

为了避免这种情况的发生,我们可以这样写

<div id="myDiv"><input type="button" value="Click me" id="myBtn">
</div>
<script type="text/javascript">var btn = document.getElementById("myBtn");btn.onclick = function(){// 手动将 btn.onclick 指向 null, 这样在删除 input 对象时,就不会发生内存泄漏btn.onclick = null;document.getElementById("myDiv").innerHTML = "Processing...";}
</script>

innerHTML将对象置为空

用innerHTML将对象置为空时,如果其中的元素被其他引用,也会发生内存泄漏。

尽管我们将divinnerHTML赋值为空,但因为引用p指向div中的p元素,这时垃圾回收器会认为p是有用的,因为被引用着,所以不会回收p占用的内存,导致内存泄漏。

<div id='myDiv'><p id='myP'>innerHTML<p>
</div>
<script type="text/javascript">var div = document.getElementById("myDiv");var p = document.getElementById("myP");div.innerHTML = '';</script>

闭包

闭包的重要作用之一就是保持状态

正常情况下,一个函数运行结束,其内部的变量就应该被释放。但下面的情况是,函数outer返回一个匿名函数,这个函数引用变量obj。这样导致函数outer运行结束后,它的变量obj并没有被释放。

function outer(){var obj = {name:'xiaoxiong'};return function(){console.log(obj);}
}

意外的全局变量

你可以通过加上'use strict'启用严格模式来避免这类问题, 严格模式会阻止你创建意外的全局变量

函数运行结束,变量仍然存在,导致泄漏。

function work() {bar = "this is a hidden global variable";
}// 上面的函数等价于
function work(arg) {window.bar = "this is an explicit global variable";
}

现在我们总结一下,导致内存泄漏的原因大致可以分为两种

  • 函数运行结束,其内部的变量仍存在
  • 我们删除元素,但元素在内存中仍然存在

导致这两种情况的根本原因就是有其他变量引用这些元素。让垃圾回收器认为这个元素还是有用的,因此想避免内存泄漏,我们应该, 要删除一个元素,就要保证在删除这个元素之前,这个元素不被其他其他元素引用(将引用这个元素的指针指向其他元素或置空)

http://www.jmfq.cn/news/5230027.html

相关文章:

  • wordpress 5.1/百度搜索seo优化技巧
  • 企业网站建设分析/seo的概念
  • 做网站用c 还是js/临沂今日头条新闻最新
  • 自己可以免费做网站吗/西安疫情最新情况
  • 有没有网站/seo优化主要做什么
  • 如何设计出更好用户体验的网站/seo博客网站
  • 长治网站制作公司/矿坛器材友情交换
  • 武汉网站建设报价明细表/关键词你们懂的
  • 网站建设好后如何连接服务器/360搜索引擎
  • 网站开发流程图/湖南seo优化公司
  • 网站建设规划方案.ppt/汕头seo计费管理
  • 免费做网站建设/海南seo排名优化公司
  • 威宁住房和城乡建设局网站/百度推广服务
  • 网站制作知识/怎样开自己的网站
  • 新手什么网站做外贸/常见的推广平台有哪些
  • 前程无忧招聘网站标记怎么做/企业培训网
  • 哪个网站可以做抑郁症测试题/论文收录网站排名
  • 网站开发出来有后台么/谷歌app下载
  • wordpress 微信图标/网站内容优化关键词布局
  • 国学大师网站谁做的/北京网络推广公司wyhseo
  • 湖南高端网站制作公司/360手机优化大师下载
  • 建站公司转型做什么业务/宜昌今日头条新闻
  • 做网站有哪些费用/志鸿优化网
  • org已经备案的网站/网络营销案例分析题
  • 最专业的网站建设/google移动服务应用优化
  • 长安网站建设制作/媒体营销
  • 男人做爽的免费网站/抖音seo培训
  • 网站商城建设/合肥优化排名推广
  • 做网站开发的公司哪家好/百度移动版
  • 百度网站公司信息推广怎么做/软件开发培训班