2013-03-13 98 views
29

這是一個很長的時間 - 有沒有辦法通過JS插件檢測較差的vs強大的顯卡性能?檢測顯卡性能 - JS

我們爲客戶構建了一個視差網站,它在較低性能的機器上出現斷斷續續的問題 - 我們可以調整性能以使其在整個主板上更好地工作 - 但這當然會降低具有更高性能機器的用戶的體驗。

我們可以檢測瀏覽器的版本也 - 但同樣的瀏覽器可以在低和高性能的計算機上運行 - 這樣不利於我們的情況

任何想法?

+5

這也是一個longshot :)試圖最初檢測幀率的工作?例如,在一段時間內對網站進行幀計數,並對網站進行適當的配置並相應地進行調整? – jcage 2013-03-13 16:36:45

+0

喜歡這個計劃 - 努力嘗試這個好方法嗎? – Dancer 2013-03-13 17:32:41

+0

顯卡性能不一定是此問題的限制因素。 – Brad 2013-03-20 03:29:59

回答

21

requestAnimationFrame(rAF)可以幫助解決這個問題。

你可以使用rAF來計算出你的幀速率。關於這方面的細節:calculate FPS in Canvas using requestAnimationFrame。簡而言之,你可以計算出幀之間的時間差,然後除以1(例如1/.0159s〜= 62fps)。

注:您選擇的任何方法,性能將被任意決定。也許任何超過每秒24幀的內容都可以被認爲是「高性能」。

+1

+1提供了一個「真實」的答案......而不是我的警察:-) – 2013-04-01 21:00:34

1

Firefox有一個不支持的圖形卡列表:https://wiki.mozilla.org/Blocklisting/Blocked_Graphics_Drivers有關的help acrticle

但你只能訪問WebGL的功能時,間接地測試他們......

http://get.webgl.org/troubleshooting/引導你到時候有問題,相應的瀏覽器提供商。當檢查JS代碼時,您將看到他們通過測試

if (window.WebGLRenderingContext) { 
    alert('Your browser does not support WebGL'); 
} 

如果您有最新的圖形卡。

+2

WebGL的可用性表示最新的瀏覽器,而不是高圖形性能。 – Bergi 2013-03-13 21:02:32

+0

@Bergi不是毫不誇張。我使用Win7和最新的瀏覽器(FF19)運行舊的MacBook,但是我的圖形硬件對WebGL來說不夠好(根據Mozilla)。但Chrome運行所有WebGL代碼,由於缺乏製造商的支持,他們完全禁用了Graphic Acceleration。 – powtac 2013-03-13 23:42:17

+0

這個答案只適用於WebGL。我可以有一個性能很好的顯卡,但不支持OpenGL。另外,請記住,顯卡性能對被問到的特定問題沒有多大影響。 – Brad 2013-03-19 21:08:47

1

您可能會考慮檢查瀏覽器是否支持window.requestAnimationFrame,這表明您正在新瀏覽器中運行。或者考慮檢查jQuery.fx.interval

然後,您可以實現自定義功能來衡量可用的處理能力。您可以嘗試使用自定義緩動功能,然後通過像.slideDown()這樣的功能來運行,以瞭解可用的計算能力。

看到這個answer關於如何檢查在JavaScript性能更多的想法的另一個問題。

3

這是「舊學校」加載屏幕有用的地方,你可以在前臺(或隱藏)渲染一些複雜的東西,如果它看起來很古怪或輕快就沒關係 - 而且當你有加載您的資源,您可以決定啓用或禁用哪些效果。

基本上你會使用什麼jcage提到這一點,測試幀率(即使用setInterval結合計時器)。這並不總是100%可靠,但是因爲如果他們的機器在這種情況下決定做一個三螺旋後退翻騰(或更可能的事情),你會得到一個狡猾的閱讀。根據所涉及的動畫,可能會實時升級和降級效果,但這對代碼來說總是更加棘手,再加上您自己對情況的分析實際上有時會導致性能下降。

16

爲什麼不讓用戶決定? Youtube(和許多其他視頻共享網站)實現了播放質量的選擇器,現在是一個帶有您可以選擇的分辨率列表的齒輪圖標。請問這樣一個HD | SD or Hi-Fi | Lo-Fi在應用程序的上下文中選擇器的工作(或者甚至是有意義的)?

1

如果瀏覽器是超現代的並且支持requestAnimationFrame,您可以實時計算動畫幀速率,併爲較慢的機器放棄動畫設置。這就是IE 10,Firefox 4,Chrome 10和Safari 6.

您基本上會創建一個'tick'函數,該函數在requestAnimationFrame()回調上運行,並跟蹤每個tick之間傳遞的毫秒數。經過如此多的刻度被註冊後,您可以對它進行平均以確定您的整體幀率。但有兩點需要說明這樣:

  1. 當標籤處於後臺requestAnimationFrame回調將暫停 - 這樣一個單一的,突然幾秒鐘幀之間多分鐘的延遲,並不意味着它是一個緩慢的動畫。並且:

  2. 簡單地在每個動畫幀上運行JavaScript標尺將導致整個動畫減慢一點;沒有辦法測量那樣的東西而不會對它產生負面影響。請記住,海森堡是個混蛋。

對於舊的瀏覽器,我不知道有什麼方法可靠地測量幀速率。你可能可以使用setTimeout()來模擬它,但它不會那麼準確 - 並且可能會對性能產生更多的負面影響。

1

這可能是基於風險/收益的決定。我認爲你必須在這裏做出重要而艱難的決定。

1) 如果您決定有兩個verions,你將不得不花一些時間:

  • 弄明白快速,非侵入性的測試
  • 花費時間執行該
  • 捲成生產

你很可能最終會得到不正確的實現,例如在我的電腦運行70個鉻標籤,帶1080p動畫的VLC, nd IntellijIDEA

至少現在,我的MBP 2012模型將被檢測爲「慢」電腦的概率很高。

誤報真的很難弄清楚。

2) 如果你選擇一個版本,你將不得不在HD和Lo-Fi之間進行選擇,就像@Patrick提到的那樣,在我看來這又是一個錯誤。

我會建議你去Google Analytics,找出瀏覽器分佈(是的,我知道它可能會引起誤解,但其他測試也是如此),並基於此(如果大多數用戶是Chrome +現代的IE/FF與HD版本一起使用,但是花一些時間來計算優化策略

總有一些事情可以做得更好更快,獲得一臺舊筆記本電腦,然後進行優化,直到你獲得體面的FPS率。喲作爲開發者需要做出這樣的決定,那就是你的責任

3) 如果你從瀏覽器發行版中發現你絕對必須使用Lo-Fi版本,好吧,試着去思考是否值得「降級」,並且只有在這是你最後的手段時才實施它。