freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

瀏覽器內(nèi)存泄漏word版-展示頁(yè)

2024-09-01 05:50本頁(yè)面
  

【正文】 )。 var a=(div)。解決方案2:在return 之后a=null,不可能? 看看下面:function A(){ }}a本身可以通過(guò)this訪問(wèn),將其它需要訪問(wèn)的外層函數(shù)變量傳遞給BuildEvent就可以了。 alert()。}function BuildEvent(b){那么辦法有2個(gè)一是將環(huán)境到a的引用斷開 另一個(gè)是將function到環(huán)境的引用斷開,但是,如果要在函數(shù)中訪問(wèn)b就不能將Function放到外面,如果要返回a的值,就不能a=null,怎 么辦呢?解決方案1:構(gòu)造一個(gè)不含a的新環(huán)境function A(){ return a。 =function(){ var b=(div)。 var a=(div)。 }}這將導(dǎo)致內(nèi)存泄露。 alert(hi)。避免事件導(dǎo)致的循環(huán)引用 在比較成熟的js程序員里,把事件函數(shù)寫成閉包是再正常不過(guò)了:function A(){這個(gè)太容易了,算不上正經(jīng)方案。顯式類型轉(zhuǎn)換 首先說(shuō)說(shuō)最容易處理的情況 對(duì)于類型轉(zhuǎn)換造成的錯(cuò)誤,我們可以通過(guò)顯式類型轉(zhuǎn)換來(lái)避免:var s=newString(lalalalala)。內(nèi)存泄露怎么辦?真的以后不用閉包了么?沒(méi)法封裝控件了?這樣做還不如要了js程序員的命,嘿嘿。動(dòng)態(tài)垃圾回收不是保證所有內(nèi)存都在離開頁(yè)面時(shí)收回,而是要保證內(nèi)存的充分 利用,運(yùn)行時(shí)不回收,等到離開時(shí)回收有什么用?這只是名義上的避免泄露,其實(shí)是完全的泄露。所以,ie7中記 住一條原則:在離開頁(yè)面之前把所有創(chuàng)建的DOM元素掛到DOM樹上。接下來(lái)是ie7和ie8 beta 1中運(yùn)行這段程序,看到什么?沒(méi)看錯(cuò)吧,2個(gè)都泄露了!別急,刷新一下頁(yè)面就好了。那么是什么問(wèn)題呢?MS的解釋是插入順 序不對(duì),必須先將父級(jí)元素appendChild。 div id=hostElement/div button onclick=LeakMemory()Memory Leaking Insert/button /head } hostElement = null。t leakfoo()39。 var childDiv =)。 (div onClick=39。 ...{ i 5000。 // Do it a lot, look at Task Manager for memory response var hostElement = (hostElement)。 function CleanMemory() } childDiv = null。 parentDiv = null。 (childDiv)。 (parentDiv)。 (parentDiv)。 (childDiv)。foo()39。 var childDiv =)。 (div onClick=39。 ...{ i 5000。 // Do it a lot, look at Task Manager for memory response var hostElement = (hostElement)。 function LeakMemory() head在ie7中 因?yàn)樵噲Dfix循環(huán)引用bug而讓情況變得更糟,以至于我對(duì)寫這一段種滿了恐懼。而 這個(gè)轉(zhuǎn)換成的臨時(shí)對(duì)象100%會(huì)泄露(汗一下)。這段代碼怎么了?看看吧,lalalalala已經(jīng)泄露了。這是極其匪夷所思的一個(gè)bug,看下面代碼var s=lalalalala。引用函數(shù)function(){alert(hi)}函數(shù)function(){alert(hi)}引用ScopeA這樣就很清楚了,所謂closure泄露,只不過(guò)是幾個(gè)js特殊對(duì)象的循環(huán)引用而已。假設(shè)A()執(zhí)行時(shí)創(chuàng)建的作用域?qū)ο蠼凶鯯copeA 找到以下引用關(guān)系(div)。 }}A()。 alert(hi)。試試看,根據(jù)前面 講的scope對(duì)象的知識(shí),能不能找出循環(huán)引用?function A()...{=a。var b=new Object()。循環(huán)引用很常見(jiàn),而且通常是無(wú)害的,但如果循環(huán)引用中包含DOM對(duì)象或者ActiveX對(duì)象,那么就會(huì)發(fā)生內(nèi)存泄露。當(dāng)一個(gè)對(duì)象引用自己時(shí),它自己形成了循環(huán)引用。假如B也引用了A,那么A和B之間構(gòu)成了循 環(huán)引用。瀏覽器內(nèi)存泄露目前發(fā)現(xiàn)的可能導(dǎo)致內(nèi)存泄露的代碼有三種:循環(huán)引用 自動(dòng)類型裝箱轉(zhuǎn)換 某些DOM操作 下面具體的來(lái)說(shuō)說(shuō)內(nèi)存是如何泄露的循環(huán)引用:這種方式存在于IE6和FF2中(FF3未做測(cè)試),當(dāng)出現(xiàn)了一個(gè)含有DOM對(duì)象的循環(huán)引用時(shí),就會(huì)發(fā)生內(nèi)存泄露。什么是循環(huán)引用?首先搞清楚什么是引用,一個(gè)對(duì)象A的屬性被賦值為另一個(gè)對(duì)象B時(shí),則可以稱A引用了B。同樣道理 如果能找到A引用B B引用C C又引用A這樣一組飲用關(guān)系,那么這三個(gè)對(duì)象構(gòu)成了循環(huán)引用。注意,在js中變量永遠(yuǎn)是對(duì)象的屬性,它可以 指向?qū)ο?,但決不是對(duì)象本身。例子:var a=(div)。=b。很多情況下循環(huán)引用不是這樣的明顯,下面就是著名的閉包(closure)造成內(nèi)存泄露的例子,每執(zhí)行一次函數(shù)A()都會(huì)產(chǎn)生內(nèi)存泄露。 var a=(div)。 =function()...{OK, 讓我們來(lái)看看。(div)。自動(dòng)類型裝箱轉(zhuǎn)換:這種泄露存在于ie6 ie7中。alert()。我們知道js的類型中,string并非對(duì)象,但可以對(duì) ,為什么呢?因?yàn)閖s的默認(rèn)類型轉(zhuǎn)換機(jī)制。某些DOM操作也可能導(dǎo)致泄露 這些惡心的bug只存在于ie系列中。從ie6談起,下面是微軟的例子,html script language=JScript... ...{ for(i = 0。 i++) var parentDiv =foo()39。 (div onClick=39。)。 // This will leak a temporary object hostElement = null。 } ...{ for(i = 0。 i++) var parentDiv =foo()39。 (div onClick=39。)。 // Changing the order is important, this won39。 (parentDiv)。 (childDiv)。 (parentDiv)。 (childDiv)。 parentDiv = null。 childDiv = null。 } /script body button onclick=CleanMemory()Clean Insert/button /body/html看看結(jié)果吧,LeakMemory造成了內(nèi)存泄露,而CleanMemory沒(méi)有,循環(huán)引用了么?仔細(xì)看看沒(méi)有。這聽(tīng)起來(lái)有些模糊,這里給出一個(gè)比較恰當(dāng)?shù)牡葍r(jià)描述:永遠(yuǎn)不要使用DOM節(jié)點(diǎn)樹之外元素的 appendChild方法。為什么呢?ie7改變了DOM元素的回收方式:在離開頁(yè)面時(shí)回收DOM 樹上的所有元素,所以ie7下的內(nèi)存管理非常簡(jiǎn)單:在所有的頁(yè)面中只要掛在DOM樹上的元素,就不會(huì)泄露,沒(méi)掛在DOM樹上,肯定泄露。接下來(lái)談?wù)刬e7的這個(gè)設(shè)計(jì)吧,坦白的說(shuō),這種做法純粹是偷懶的垃圾做法。況且還沒(méi)有回收DOM節(jié)點(diǎn)樹之外的元素。事實(shí)上,通過(guò)一些很簡(jiǎn)單的小技巧,可以巧妙的繞開這些危險(xiǎn)的bug。//此處將string轉(zhuǎn)換成objectalert()。不過(guò)類型轉(zhuǎn)換泄露也就這一種處理方法了。 var a=(div)。 =function(){按照IBM那兩位老大的說(shuō)法,當(dāng)然是把函數(shù)放外面或者a=null就沒(méi)問(wèn)題了,不過(guò)還要訪問(wèn)A()里面的變量呢?假如有下面的代碼:function A(){ alert()。 }}如何將它的邏輯表達(dá)出來(lái) 還避免內(nèi)存泄露? 分析一下這個(gè)內(nèi)存泄露的形式:只要onclick的外部環(huán)境中不包含a那么,就不會(huì)泄露。 var a=(div)。 var b=(div)
點(diǎn)擊復(fù)制文檔內(nèi)容
語(yǔ)文相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1