2009-10-22 33 views
1

我知道。可以將JavaScript和樣式表文件動態加載到文檔的標題中。另一方面,可以從文檔的標題中刪除腳本和樣式表標籤。但是,加載的JavaScript仍然在內存中。是否有可能銷燬加載的JavaScript,包括函數和局部變量?

是否有可能從Web瀏覽器內存中銷燬加載的JavaScript?我認爲。它應該像下面的僞代碼一樣。

// Scan all variables in loaded JavaScript file. 
var loadedVariable = getLoadedVariable(JavaScriptFile); 

for(var variable in loadedVariable) 
{ 
    variable = null; 
} 

// Do same thing with function. 

是否有可能爲這樣做創建一些JavaScript?

感謝,

PS。現在,您可以使用xLazyLoader和jQuery來動態加載內容。

+0

你爲什麼認爲你需要? – moonshadow 2009-10-22 09:03:28

+0

因爲我想創建一些沒有任何iframe的web應用程序。每一頁都將通過Ajax加載。此外,JavaScript和樣式表將根據頁面要求加載。之後,引擎將銷燬未使用的JavaScript和樣式表,以減少函數,變量,JavaScript規則和樣式表的重複名稱。 – 2009-10-22 09:09:44

回答

3

如果加載腳本分配給window屬性,例如與模塊模式,像這樣:

window.NiftyThing = (function() { 
    function doSomething() { ... } 
    return { 
     doSomething: doSomething 
    }; 
})(); 

window.NiftyThing = { 
    doSomething: function() { ... } 
}; 

NiftyThing = { 
    doSomething: function() { ... } 
}; 

然後你就可以刪除引用它的屬性:

delete window.NiftyThing; 

...至少刪除那一個主要引用;如果有其他參考,它可能無法清理。

如果var關鍵字已經被使用:

var NiftyThing = { 
    doSomething: function() { ... } 
}; 

...那就不是一個屬性,您不能使用delete,所以設置爲undefinednull將打破參考:

NiftyThing = undefined; 

您可以對衝你的賭注:

NiftyThing = undefined; 
try { delete NiftyThing; } catch (e) { } 

在所有情況下,由JavaScript實現決定是否沒有未加載的外部引用來加載腳本並進行清理,但至少您會給它一個機會。

如果按照Guffa的說法,加載的腳本不使用模塊模式,那麼您需要將這些規則應用於其所有符號。這是模塊模式爲Good Thing(tm)的另一個原因。;-)

+0

因此,我需要使用正則表達式來查找變量和函數的每種可能模式。對? – 2009-10-22 09:18:49

+0

如果你不知道你要卸貨的是什麼,我想你有很多工作要做。你不會知道它甚至會工作;腳本可以設置事件處理程序,它將保持引用。你最終可能會打破它(事件處理程序試圖通過你已經刪除的符號調用一個函數),而不是刪除它。 – 2009-10-22 09:34:26

1

刪除已加載的Javascript文件或許不可能取消代碼所做的操作,即代碼中的函數仍然定義。

您可以通過簡單地用別的東西代替它刪除功能定義:

myFunction = null; 

這不會刪除這些標識符,但它不是一個功能了。

+0

我可以通過設置爲未定義的值來刪除它嗎? – 2009-10-22 09:11:47

+0

@靈魂大師:是的,要麼是未定義的,要麼是null。 – 2009-10-22 09:32:42

相關問題