2016-10-07 28 views
0

我創建了一個只有ajax的網站,所以我可以使用花哨的頁面過渡和其他可愛的東西。對於所有元素我有這樣一塊的JavaScript/jQuery的的:一個Ajax專用網站會不會隨着時間的推移而記憶?

var slider = { 
    init: function(){ 
     if($(".slider").length > 0){ 
     //do slider stuff 
     } 
    } 
} 

,並在每個頁面加載我初始化一切,當該元素是在那個當前頁面會做的事情。

pageloaded = function(){ 
    slider.init(); 
    tabs.init(); 
    comments.init(); 
    reviews.init(); 
    //... 
} 

但我的問題是。當一箇舊頁面被刪除,並且它的各種按鈕和其他元素都附加了javascript。當頁面是.removed()時,它會自動消耗的內存和其他資源會被「釋放」嗎?

這種編程方式還有其他缺點嗎?

回答

0

這與性能和內存有關。

這取決於你在做什麼以及你如何做。

如果你要用AJAX請求代替整個頁面的加載(例如,當用戶點擊一個鏈接按鈕並且會有一個完整的頁面加載時執行AJAX調用),那麼AJAX將減少服務器負載,因爲你(大概是)進行較少的處理並返回較少的數據。

如果您要添加自動更新類型AJAX,並且您每隔幾秒輪詢一次服務器,那麼這可能會增加負載,具體取決於使用情況。

假設您正在執行良好的實施,您可以獲得良好的結果。

Edit(對於你的第二個評論):

爲什麼我說你有好的結果假設你依靠良好的執行。

通常情況下,瀏覽器會保留對XHR(也稱爲垃圾收集根目錄)的不可訪問的內部引用。

這不僅使XHR在請求期間保持活動狀態,而且還保持它引用的閉包。

響應進入後,它也保持響應數據一樣。瀏覽器將決定何時釋放這些對象。雖然老版本的IE接口將這些引用保留的時間遠遠超過了必要的時間,但現代bwosers具有更好的性能和功能。

這是一個非常複雜的問題,用幾句話來解釋它。

所以要重新蓋:

你可以有很好的效果假設你正在執行一個良好的實施。

+0

不,我的意思是你描述的第一件事。只有在用戶點擊鏈接時纔會做。不過,我不是指瀏覽器中的性能後端,而是性能前端。 當瀏覽器被刪除時,JavaScript的所有綁定是否會被清除? – NLAnaconda

+0

你難過:'它會消耗的內存和其他資源嗎?這就是爲什麼我給你這樣一個答案。爲了迴應您的第二條評論,我做了一個編輯。我希望這將有所幫助。你可以在網上閱讀關於這個問題。 :) – Franco

0

從理論上講,如果一切都做對了,答案是不會的。 :)

當我說得對,我的意思是在2個地方,首先有時在實際瀏覽器中可能會導致內存泄漏的錯誤。微軟曾經在一點上做過引用計數的垃圾回收器,這是瀏覽器供應商犯了一個錯誤的典型例子。我認爲所有瀏覽器現在都使用標記和清理垃圾收集器。

另一個地方是你可以得到內存泄漏,顯然是在JavaScript中,無論是由你或第三方庫。

僅僅因爲JavaScript使用垃圾收集器,仍然並不意味着你不能像內置泄漏那樣獲得內存泄漏,正如一些人可能會建議的那樣。這仍然是可能的,JavaScript的最常見的錯誤是說事件代表團& SetInterval,但你可以很容易地建立一些全球窗口對象等數據。

要考慮的主要問題是,如果我的對象不再引用,那麼是的,所有對象的內存將由垃圾收集器自動釋放。

Chrome有一些漂亮的下降調試工具來檢查這樣的事情。所以如果你擔心你的內存泄漏,那麼看看那裏。

相關問題