2013-06-12 30 views
0

我在HTML5中編寫了這個Mandelbrot plotter,它有一個我無法弄清楚的可重現的性能錯誤。爲什麼這個HTML5應用程序的性能會降低座標負載

在Plot Controls部分中,可以將座標保存到選取列表中,以便稍後可以直接返回。然而,如果我選擇了一組保存的座標,然後點擊「加載」,表演突然變得如此緩慢,起初我認爲它掛起了腳本(它最終會開始按照它應該的方式開發圖像)。

我不明白爲什麼。 Load按鈕(第258行)的onclick處理程序只需調用gotoCoord()(第457行)。 gotoCoord函數只需設置幾個繪圖參數(xOff,yOff,fMag),然後調用initDisplay()。我在其他幾個地方做了這些確切的事情,沒有任何不良影響(在124行放大了縮小,在386行放大了縮小,在394行放大了縮小)。我無法弄清楚gotoCoord有什麼不同。

我已經完成了重複的比較測試,導航到一個繪圖並計時需要多長時間來開發圖像。然後我保存這些座標並加載它們。性能受到嚴重衝擊。

其他人看到我失蹤了嗎?

+1

1毫秒的'setInterval'是錯誤的。考慮使用'requestAnimationFrame'來代替。如果在'initDisplay'之前將加載的值轉換爲正確的數字(例如'xOff = + xOff'),看看性能是否提高。 – DCoder

+0

就是這樣!從localStorage加載它的文本後! (杜)謝謝! 至於間隔,幀需要大約10-15毫秒來處理。但在觀察堆棧跟蹤之後,我注意到幀不排隊;一次只能處理一個。所以我想,爲什麼不盡快讓下一個開始呢? 再次感謝! – Allen

+1

@Allen你將setInterval和setTimeout混合在一起。 setInterval不關心,它會嘗試每1毫秒運行一次。 setTimeout在被調用時將等待額外的1 ms。正如DCoder建議的那樣,requestAnimationFrame是一個更好的解決方案。它在* your *計算機上使用10-15ms並不意味着它會在別人的計算機上使用它)requestAnimationFrame會同步到顯示器的VBLANK,並因此會在* all *計算機上更好地工作。 – K3N

回答

1

這個問題已經回答,所以只是從未回答的列表中取出。

@ DCoder的評論解決了它。繪圖參數存儲在localStorage中,並從那裏加載選擇列表。當然,從localStorage加載時,這些值都將是字符串。 gotoCoord與其他功能的不同之處在於它。由於參數在圖中使用(第589行和第590行),因此每幀中每個像素的每次計算必須將文本轉換爲數字!

三個小加號固定它。

相關問題