簡體   English   中英

Javascript setInverval似乎很慢?

[英]Javascript setInverval seems slow?

所以我試圖做一個setInterval,以檢查某些東西在頁面上的位置。 我遇到的問題是,如果我將其設置為10、100、250,這似乎非常慢並且會緩慢向下滾動。

setInterval('functionName()', 10);
setInterval('functionName()', 100);
setInterval('functionName()', 250);

更新:該功能的原因是當用戶滾動時將元素向下移動到頁面上。 問題在於,這是一個iFrame中的Facebook應用,該應用比屏幕大。 我似乎找不到找到將iScroll之外的onScroll屬性附加到Facebook的方法(或者也許可以?!?我還沒有運氣),所以我被迫使用此方法。 基本上,它將抓住Facebook傳入的滾動高度並將元素向下移動到頁面中。 它可以工作...但是即使向下滾動也似乎很慢。

這就是我無法解決的事情嗎?

您每10毫秒執行一次操作。 那很可能會干擾瀏覽器的正常運行。 每當運行javascript時,瀏覽器界面都會被阻止。

也許如果您描述了要使用間隔計時器進行的操作並發布了代碼,我們可以建議使用性能更好的方法。

setInterval()setTimeout()的最小時間分辨率因瀏覽器而異,在某些情況下可能高達15或20毫秒(某些文章規定為75毫秒)。 您嘗試以更高的分辨率(更短的間隔)執行操作實際上是向瀏覽器發出的更多請求-無法保證。 分辨率高於瀏覽器功能的請求將被“限制”,並且運行頻率不會低於該最小值。 當然,如果瀏覽器的工作量足夠高(因為很可能會保證連續調用該功能),則間隔可能會更大。

附帶說明一下,最好不要將setInterval()函數參數作為字符串提供。 這樣做將導致在全局范圍內評估該功能。 代替這個:

setInterval('functionName()', 10);

您應該使用此:

setInterval(functionName, 10);

您應該重新考慮是否需要如此頻繁地運行函數。 也許有一個事件驅動的替代方案。

參考: 最小延遲的MDN

從本質上講,JavaScript是單線程的。 這意味着您的JavaScript與瀏覽器的UI在相同的過程中運行。

因此,每當瀏覽器執行JavaScript時,它都必須暫停正在執行的操作(通常是在瀏覽器窗口中繪制頁面),然后運行代碼。

由於您正在每秒執行100次代碼段(1000/10),因此您只是在阻礙瀏覽器的正常運行!

我的猜測是functionName()很慢。 250對於現代瀏覽器來說應該還不錯。 發布該功能,我們將看看是否可以改進它。

尚未提及的內容:當您確實應該傳遞函數對象本身時,您正在將字符串傳遞給setInterval

setInterval(myFunction, 5000)

當您給它一個像"functionName()"這樣的字符串時,會發生什么事,那就是它被eval ,這可能是某些緩慢情況的根源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM