2009-06-28 30 views
12

有沒有什麼辦法來檢測一臺計算機是否慢並且不運行一些代碼(通過關閉jQuery動畫或者只是運行一個函數,如果它快)?跳過一些代碼,如果計算機很慢

我知道這個問題可能是真的微不足道,但我注意到,在一些速度較慢的電腦即使最簡單的保證金動畫移動東西閃爍,不看起來非常漂亮完成。

更新:
我試圖運行的代碼只是一堆動畫;他們都會花費相同的時間,但在較慢的瀏覽器上,動畫會按照您在觀看緩衝視頻時看到的內容進行分割。

回答

11

運行javascript時,您無法事先知道目標計算機的性能。我能想到的唯一辦法就是運行一個函數來進行一些計算並測量所花費的時間。該功能必須進行足夠數量的計算,以確保運行所需的時間代表機器的性能。

一般來說,我會建議不要做這樣的性能測試,因爲它會佔用目標機器上的資源,這是用戶通常不喜歡的。但是,也許你可以測量完成第一個動畫的時間,如果速度太慢,則禁用後續動畫。

+2

性能測試可以真正做* *動畫播放,並使用(虛擬)沒有額外的資源。我不明白爲什麼沒有,當你可以幾乎免費地得到一個相當有效的響應性測試。動畫對計算機使用很多計算時間這一事實可能會對用戶造成更多的刺激! – Noldorin 2009-06-28 23:00:47

5

我認爲有兩個選擇:

  1. 讓用戶決定 - 放棄「低帶寬/低規格」選項,點擊它就會顯示該網站的簡化版本,當用戶。

  2. 嘗試檢測速度較慢的機器 - 您可以嘗試使用超時腳本檢測較慢的機器 - 如果動畫/加載未在一定時間內完成,請切換至較簡單的網站版本。這種方法的缺點是你不知道爲什麼腳本超時 - 可能是一個糟糕的連接,或者用戶在暫時放慢他們的機器的同時加載其他東西。

希望這給你一些想法。

喬希

7

最簡單的解決辦法是用一個複選框來把它留給了用戶,但其他明智的你可以嘗試時機的第一動畫的計算機,然後如果超過一定的時間限制,剩餘的動畫被關閉...例如...

var start = new Date(); 
//... some jQuery animation 
var end = new Date(); 
var diff = end - start; 

然後,例如,如果動畫應該採取1.5秒和時間差是象5秒,然後關閉所有其餘的動畫。

+0

僅供說明,最後2行必須在動畫完成後執行,即在動畫回調中執行。 – Smokie 2015-10-19 15:11:28

0

由於JavaScript的運行在部分信任的環境中,你不會是能夠得到任何操作系統級別的信息,我想。

你能做的最好的事情就是測試「響應性」。一種可能的方法就是開始播放完整的動畫並通過比較目標幀速率和「真實」幀速率來檢測滯後。然後,您可以跳過動畫(代碼)的位,以減少計算時間,從而相應地提高響應速度/幀速率。這實際上是多少桌面遊戲檢測滯後並因此降低動畫的複雜度。我無法保證它在JavaScript中的瀏覽器中能夠很好地工作,但它確實值得一試。

1

我想指出的是,如果你打算把它留給用戶(我認爲這是一個好主意),你應該清楚地表明你問的是電腦的速度,而不是連接速度,或者帶寬。用戶可能有一臺速度非常快的筆記本電腦,但正在使用慢速公共無線連接,反之亦然。由於Javascript是客戶端,它只是計算機速度的問題。

+0

這不是一個真正的答案,但無論如何我都會投票贊成,因爲重要的一點是更受歡迎的答案似乎忽略了。 – 2015-11-21 10:22:44

0

我猜你想要關閉的代碼需要大量的時間來運行。

我建議你:

  • 開始執行此代碼
  • 它的部分執行後,看到多少實時已ellapsed
  • 如果過多的實時已ellapsed(即,如果代碼執行得太慢),然後取消執行而不是完成它。