2014-07-14 65 views
1

這是我使用永久檢查導航/設備的大小,以使我的網站響應一個Javascript代碼的一部分:誤會了輕循環的延遲! JS

//max screen size value for interactions with other elements : 

var getMaxSize = 0; 

// Screen Inspector (initied on Body Onload) : 

function Inspector() 
{ 
    if (window.screen.width == 480) 
     { 
      getMaxSize = window.screen.width; 
     } 
    setInterval(function(){Inspector()}, 1000); 
} 
// rest (...) 

的檢查功能僅僅是一個循環,獲得的價值的屏幕尺寸每隔1秒(我們不能說計算機沒有足夠的時間思考,對吧?)。 但是,幾秒鐘後,可以是15,我的RAM飽和。 爲什麼如此貪婪得到一個值並將其分配給一個變量?對象「window.screen」是否太慢?

+0

您可能想要'setTimeout'。 – elclanrs

+1

爲什麼你想每1秒打一次?爲什麼你需要不止一次地打這個電話? – sharf

+0

不止一次的情況下,用戶更改他的設備方向 – FlowHoa

回答

1

每秒運行一次的功能相當密集,舊版本的瀏覽器可能會變慢。

來完成你想要什麼,你應該使用偵聽器onresize事件是這樣的:

window.onresize=Inspector; 

這會在每次用戶調整窗口大小,並不會浪費系統資源時運行Inspector功能。

+2

呃,這不應該是'window.onresize = Inspector;'?否則就是將'window.onresize'的值設置爲'Inspector'的調用的_result_。 – zamnuts

+0

對於像我這樣的JavaScript實踐中的新手來說,這很奇怪,因爲在我看來,一個偵聽器是一種循環。所以我對聽衆和做聽衆工作的腳本之間的反應性差異感到驚異。這是編譯問題嗎? – FlowHoa

+0

@FlowHoa我可能不是最好的回答,但事件監聽者使用的資源要少得多。想象一下,當窗口調整大小時,它會檢查是否有任何關注(事件偵聽器)並告訴它們運行。 – sharf

0

setInterval真的很粗糙,幾乎在任何情況下都可以避免。相反,因爲Javascript是一種基於事件的語言,所以只有當它檢測到視圖端口或屏幕大小發生變化或您正在等待檢查的自定義事件時,才應該檢查屏幕大小。在瀏覽器中間隔一般是不好的做法...

另外JavaScript有一些相當不錯的垃圾收集本身,但你可能想要設置間隔爲一個變量並清理它的每一次執行代表團只是爲了確保它一次只運行一次,並沒有開始在其自身頂部增加(由於遞歸而呈指數級增長)