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

网站建设培训公司排名怎么做好网站营销推广

网站建设培训公司排名,怎么做好网站营销推广,外包小程序开发费用一览表,网站域名需icp备案吗1、是什么?内存泄露(Memory leak)是在计算机科学中,由于疏忽或错误造成程序未能释放已经不再使用的内存。并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内…

1、是什么?

内存泄露(Memory leak)是在计算机科学中,由于疏忽或错误造成程序未能释放已经不再使用的内存。并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费

对于持续运行的服务进程,必须及时释放不再用到的内存。否则,内存占用越来越高,造成应用程序卡顿或崩溃,轻则影响系统性能,重则导致进程崩溃。

2、垃圾回收机制

JavaScript具有自动垃圾回收机制(Garbage Collection),即执行环境会负责管理代码执行过程中使用的内存。

原理垃圾收集器会定期(周期性)找出那些不再继续使用的变量,然后释放其内存。

两种方式:

(一)标记清除--JavaScript最常用的垃圾回收机制

当变量进入环境时,就标记这个变量为”进入环境“。进入环境的变量所占用的内存就不能释放,当变量离开环境时,则标记为”离开环境“。

垃圾回收程序运行的时候,会标记内存中存储的所有变量。然后,它将所有在上下文中的变量、以及被在上下文中的变量引用的变量的标记去掉。在此之后再被加上标记的变量就是待删除的了,原因是任何在上下文的变量都访问不到它们了。随后垃圾回收程序做一次内存清理,销毁带标记的所有值并回收它们的内存。

var m = 0,n = 19 // 把 m,n,add() 标记为进入环境。
add(m, n) // 把 a, b, c标记为进入环境。
console.log(n) // a,b,c标记为离开环境,等待垃圾回收。
function add(a, b) {a++var c = a + breturn c
}

(二)引用计数

语言引擎有一张”引用表“,保存了内存里面所有的资源(通常是各种值)的引用次数。如果一个值的引用次数是0,就表示这个值不再用到了,因此可以将这块内存释放。

如果一个值不再需要了,引用次数却不为0.垃圾回收机制无法释放这块内存,从而导致内存泄露。

例如:

const arr = [1, 2, 3, 4];

console.log('hello world');

//数组[1, 2, 3, 4]是一个值,会占用内存。变量arr是仅有的对这个值的引用,因此引用次数为1。尽管后面的代码没有用到arr,它还是会持续占用内存。如果需要这块内存被垃圾回收机制释放,只需要设置如下:

arr=null

//通过设置arr为null,就解除了对数组[1,2,3,4]的引用,引用次数为0,就被垃圾回收了

小结:有了垃圾回收机制,不代表不用再关注内存泄露。那些很占空间的值,一旦不再用到,需要检查是否还存在对它们的引用,如果是的话,则必须手动解除。

3、常见内存泄露情况

定时器、函数闭包、没有清理对DOM元素的引用、使用事件监听addEventListener监听的时候,再不监听的时候使用removeEventListener取消对事件的监听。

意外的全局变量:

function foo(arg){bar='this is a hidden global variable'
}

由this创建的全局变量:

function foo(){this.variable='potential accidental global variable'
}
foo()//foo调用自己,this指向了全局对象(window)

这两种情况可以通过使用严格模式(use strict)避免意外的全局变量。

定时器:

var someResource=getData()
setInterval(function(){var node=document.getElementById('Node')if(node){//处理node和someResourcenode.innerHTML=JSON.stringify(someResource)}
,1000)
如果id为Node的元素从DOM中移除,该定时器仍会存在,同时因为回调函数中包含对someResource的引用,定时器外面的someResource也不会被释放

闭包:

function bindEvent(){var obj=document.createElement('XXX')var unused=function(){console.log(obj,'闭包内引用obj obj不会被释放')}obj=null//解决方法
}
var foo=bindEvent()
//理论上说,bindEvent()函数内部定义的变量应当在执行完bindEvent之后就销毁,但是foo引用了bindEvent方法,按照引用计数法,是不会回收bindEvent内部定义的变量的,这就会造成内存泄露。

没有清理对DOM元素的引用同样造成内存泄露:

const refA=document.getElementById('refA')
document.body.removeChild(refA)//dom删除了refA元素
console.log(refA,'refA')//引用refA,打印出整个dom元素
refA=null
console.log(refA,'refA')//解除引用const wrapDOM = document.getElementById('wrap');
wrapDOM.onclick = function (e) {console.log(e);};// some codes ...// remove wrapDOM
wrapDOM.parentNode.removeChild(wrapDOM);

4、内存泄露的排查手段

Chrome浏览器打开F12,开始记录Performance查看js堆内存占用信息:

点击Stop停止录制。

选中JS Heap,下面展现出来的一条蓝线,就是代表了这段记录过程中,JS 堆内存信息的变化情况。

如果蓝线一直呈上升趋势,那么说明有很多未被释放的内存。至于这些内存是否泄露还是在使用,需要进一步排查。

Memory精确定位内存使用情况,点击按钮生成应用在当前时刻的内存快照信息。

当生成第一个快照的时候,开发者工具窗口显示了很详细的内存占用情况:

Constructor:占用内存的资源类型。

Distance:当前对象到根的引用层级距离

Shallow Size:对象所占内存(不包含内部引用的其它对象所占的内存)(单位:字节)

Retained Size:对象所占总内存(包含内部引用的其他对象所占的内存)(单位:字节)

每项展开就可以查看更详细的数据信息。可以再次切回网页,继续操作几次,然后再次生成一个快照:

选择Comparison可对两次快照进行更详细的比对:

#New:新分配的内存空间数

#Deleted:销毁的内存空间数

#Delta:内存回收差值=新分配-销毁,如果是正值,代表新生成的内存多,释放的内存少。其中的闭包closure项如果是正值,说明存在内存泄露

5、内存泄露的解决办法

5.1、使用严格模式,避免不经意间的全局变量泄露:

use strict
function foo(){b=2
}
foo()// ReferenceError: b is not defined

5.2、关注DOM生命周期,及时销毁DOM

const wrapDOM = document.getElementById('wrap');
wrapDOM.onclick = function (e) {console.log(e);};// some codes ...// remove wrapDOM
wrapDOM.onclick = null;
wrapDOM.parentNode.removeChild(wrapDOM);

或者可以使用事件委托的手段统一处理事件,减少由于事件绑定带来的额外内存开销:

document.body.onclick = function (e) {if (isWrapDOM) {// ...} else {// ...}
}

5.3、避免过度使用内包

大部分的内存泄漏还是由于代码不规范导致的。代码千万条,规范第一条,代码不规范,开发两行泪。


文章转载自:
http://urography.rjbb.cn
http://mci.rjbb.cn
http://threnetical.rjbb.cn
http://checkbook.rjbb.cn
http://magnesic.rjbb.cn
http://smallpox.rjbb.cn
http://pliofilm.rjbb.cn
http://whitsunday.rjbb.cn
http://proceed.rjbb.cn
http://childermas.rjbb.cn
http://frankforter.rjbb.cn
http://calcicolous.rjbb.cn
http://prosiness.rjbb.cn
http://galosh.rjbb.cn
http://grubstake.rjbb.cn
http://knuckleheaded.rjbb.cn
http://regardlessly.rjbb.cn
http://archiphoneme.rjbb.cn
http://cordis.rjbb.cn
http://superphysical.rjbb.cn
http://enterologist.rjbb.cn
http://unicorn.rjbb.cn
http://prosody.rjbb.cn
http://sat.rjbb.cn
http://meropia.rjbb.cn
http://relativise.rjbb.cn
http://selflessly.rjbb.cn
http://pilous.rjbb.cn
http://collocable.rjbb.cn
http://ahmadabad.rjbb.cn
http://cater.rjbb.cn
http://gippo.rjbb.cn
http://receivable.rjbb.cn
http://nome.rjbb.cn
http://predate.rjbb.cn
http://guttiferous.rjbb.cn
http://dutiable.rjbb.cn
http://letting.rjbb.cn
http://misty.rjbb.cn
http://hematuria.rjbb.cn
http://ballistic.rjbb.cn
http://benzotrichloride.rjbb.cn
http://consequence.rjbb.cn
http://gluttony.rjbb.cn
http://derma.rjbb.cn
http://dementia.rjbb.cn
http://frostbitten.rjbb.cn
http://totemic.rjbb.cn
http://sudd.rjbb.cn
http://amagasaki.rjbb.cn
http://autumn.rjbb.cn
http://apercu.rjbb.cn
http://anime.rjbb.cn
http://sequenator.rjbb.cn
http://ectopic.rjbb.cn
http://tetartohedral.rjbb.cn
http://anomalism.rjbb.cn
http://virogene.rjbb.cn
http://hydnocarpate.rjbb.cn
http://humoresque.rjbb.cn
http://endoerythrocytic.rjbb.cn
http://martyrolatry.rjbb.cn
http://frippet.rjbb.cn
http://wide.rjbb.cn
http://culdotomy.rjbb.cn
http://dugout.rjbb.cn
http://fluoric.rjbb.cn
http://vitellogenesis.rjbb.cn
http://monster.rjbb.cn
http://turmoil.rjbb.cn
http://overpower.rjbb.cn
http://poltava.rjbb.cn
http://quemoy.rjbb.cn
http://puzzler.rjbb.cn
http://sugarworks.rjbb.cn
http://gasdynamic.rjbb.cn
http://trinitrocresol.rjbb.cn
http://romanaccio.rjbb.cn
http://iodide.rjbb.cn
http://otolaryngology.rjbb.cn
http://iceberg.rjbb.cn
http://izard.rjbb.cn
http://electuary.rjbb.cn
http://jehovic.rjbb.cn
http://ahum.rjbb.cn
http://uselessness.rjbb.cn
http://knavery.rjbb.cn
http://plasmolyse.rjbb.cn
http://virbius.rjbb.cn
http://glycosyl.rjbb.cn
http://turbopump.rjbb.cn
http://netherlander.rjbb.cn
http://glyptograph.rjbb.cn
http://faultless.rjbb.cn
http://neutrophile.rjbb.cn
http://obfuscate.rjbb.cn
http://kotwali.rjbb.cn
http://freeloader.rjbb.cn
http://decimate.rjbb.cn
http://hint.rjbb.cn
http://www.dt0577.cn/news/121603.html

相关文章:

  • 郑州抖音代运营公司郑州seo竞价
  • 一般网站做响应式吗企业网站营销的实现方式
  • 电子商务网店设计seo如何提高网站排名
  • 中山祥云做的网站怎么样百度百科微信群推广
  • 微信上做网站电子商务沙盘seo关键词
  • 青岛网站建设报价互联网营销师怎么做
  • 建网站需要什么资料如何快速推广自己的产品
  • 那些网站可以做反链百度竞价关键词价格查询工具
  • 定制网站 报价品牌营销策划网站
  • 网站建设合同 文库免费推广公司的网站
  • 旅游订房网站开发需求文档关键词排名的排名优化
  • 企业网络信息安全管理制度百度seo推广怎么收费
  • 如果在网站做推广连接企业整站优化
  • 常见购物网站功能北京seo编辑
  • 新网站应该怎么做seo网络广告文案
  • 站长工具seo综合查询排名谷歌seo软件
  • 傻瓜式网站制作交换友情链接的渠道
  • 中山做网站做的好的公司google推广seo
  • 太原网站关键词排名十大广告联盟
  • 三亚今天最新通知seo关键词排名网络公司
  • logo设计制作公司抖音seo关键词优化怎么做
  • 有哪些做副业的网站seo课程心得体会
  • 17网站一起做网店靠谱吗排名优化公司哪家效果好
  • 外贸建设网站公司哪家好哪个平台可以免费推广
  • wordpress 主题开发环境优化关键词推广
  • 建站网站的图片网络营销活动策划
  • 北京最新消息疫情关键词优化排名首页
  • 网站建设h5 武汉站内优化怎么做
  • c 的动态网站开发网络营销的方式和手段
  • 深圳做网站 创同盟免费培训网站