2012-12-18 49 views
1

我必須開發一個應用程序來測量一系列實驗中的用戶響應時間。這個應用程序將在大約100臺計算機上運行,​​因此我曾提到基於瀏覽器的方法可能會減少執行安裝和更新。據說,現在我已經瞭解了瀏覽器中定時器的準確性,特別是javascript定時器,我知道從幾毫秒到10-15ms的延遲可能會有一段延遲。當用戶測量他們對屏幕上視覺隊列的響應時間時,這種延遲會對這些實驗的精度產生負面影響。爲時間精度高的桌面創建時間敏感的瀏覽器應用程序的最佳方法?

是否有一種已知的方法來獲取在瀏覽器中通過JavaScript運行的Web應用程序的精確定時器?同樣,這些實驗中的一部分需要簡單的二維動畫,例如查看用戶可以將鼠標光標停留在旋轉的多維數據集上多久。我寧願使用HTML5和Javascript,我們也不能使用Flash。

+1

你可以用」不依賴於JavaScript 1)Javascript日期(和計時器)基於系統時間。如果用戶改變他們的系統時間,JavaScript沒有真正的方法知道。例如,如果你有1分鐘的倒計時,啓動它,然後用戶將他們的時間設置回30分鐘,計時器現在將是大約31分鐘。 – Shmiddty

+0

看到這個:http://jsfiddle.net/ZqvPF/ – Shmiddty

+0

另一個問題是,在瀏覽器中使用複雜的JavaScript控制檯(和插件像greasemonkey),用戶可以替換您的JavaScript的部分來操縱他們的時間。 – Shmiddty

回答

2

確實不能依賴計時器的時間間隔,但您可以依賴新的Date對象。例如:

var previousTime = new Date().getTime(); // returns milliseconds of "now" 

var timer = setInterval(function() { 
    var currentTime = new Date().getTime(); 
    var millisecondsSinceLastUpdate = currentTime - previousTime; 
    previousTime = currentTime; 
    alert('milliseconds since last update: ' + millisecondsSinceLastUpdate); 
}, 1); 
+0

您可以看到,即使在使用Date.getTime時,仍然不準確,因爲Snuffleupagus提到過。如果你看看他引用的JavaScript演示[鏈接] http://jsfiddle.net/Ff6ZV/4/ [/ link],該示例使用當前時間減去前面的時間,就像你提到的那樣。演示顯示,在不同的瀏覽器中,它提供了不同的響應時間。代碼的執行存在延遲,並且確實不準確。 – Euthyphro

+0

@Euthyphro只是因爲在這個實驗中有不同的時間,並不意味着計算的時間差異是不準確的... – dqhendricks

+0

@Euthyphro例如,如果您使用計算的時間過去在瀏覽器上移動特定距離的精靈,對於動畫的每個幀使用(timepassed * velocity)的距離,無論系統如何,精靈都會以相同的速度傳播。唯一的漏洞是如果用戶與系統時鐘混淆。 – dqhendricks

1

正如@dqhendricks建議,你應該使用一個新的Date對象。但是,如果你需要這個一致性和準確性,你需要使用相同的瀏覽器版本在同一臺計算機上運行,​​而且不需要在後臺運行。

看看這個demo在Firefox和鉻。點擊邊緣並儘可能快地移動光標 - 我能夠在FF中獲得的最低分辨率是6MS,我能夠在Chrome上獲得的最低分辨率是42MS。

這些值在機器之間可能會有所不同。我建立了一個512MB內存和50%單核心容量的虛擬機,在FF中打開了5個選項卡並試圖進行測試 - 最低的是52MS。

所以,除非你能控制用戶瀏覽器,PC和在後臺運行的東西,否則我不會指望數據是否準確。

+0

計算的時間仍然準確。我不明白你試圖用這個實驗來證明什麼。基本上你是說不同的瀏覽器花費不同的時間執行某些操作。這並不意味着計算出的時間差是不準確的。 – dqhendricks

+0

@dqhendricks我是在推測你將要比較用戶之間的響應時間,但由於變量(瀏覽器,計算機等),你不能做出準確的比較。 – Snuffleupagus

相關問題