我在HTML5中編寫了這個Mandelbrot plotter,它有一個我無法弄清楚的可重現的性能錯誤。爲什麼這個HTML5應用程序的性能會降低座標負載
在Plot Controls部分中,可以將座標保存到選取列表中,以便稍後可以直接返回。然而,如果我選擇了一組保存的座標,然後點擊「加載」,表演突然變得如此緩慢,起初我認爲它掛起了腳本(它最終會開始按照它應該的方式開發圖像)。
我不明白爲什麼。 Load按鈕(第258行)的onclick處理程序只需調用gotoCoord()(第457行)。 gotoCoord函數只需設置幾個繪圖參數(xOff,yOff,fMag),然後調用initDisplay()。我在其他幾個地方做了這些確切的事情,沒有任何不良影響(在124行放大了縮小,在386行放大了縮小,在394行放大了縮小)。我無法弄清楚gotoCoord有什麼不同。
我已經完成了重複的比較測試,導航到一個繪圖並計時需要多長時間來開發圖像。然後我保存這些座標並加載它們。性能受到嚴重衝擊。
其他人看到我失蹤了嗎?
1毫秒的'setInterval'是錯誤的。考慮使用'requestAnimationFrame'來代替。如果在'initDisplay'之前將加載的值轉換爲正確的數字(例如'xOff = + xOff'),看看性能是否提高。 – DCoder
就是這樣!從localStorage加載它的文本後! (杜)謝謝! 至於間隔,幀需要大約10-15毫秒來處理。但在觀察堆棧跟蹤之後,我注意到幀不排隊;一次只能處理一個。所以我想,爲什麼不盡快讓下一個開始呢? 再次感謝! – Allen
@Allen你將setInterval和setTimeout混合在一起。 setInterval不關心,它會嘗試每1毫秒運行一次。 setTimeout在被調用時將等待額外的1 ms。正如DCoder建議的那樣,requestAnimationFrame是一個更好的解決方案。它在* your *計算機上使用10-15ms並不意味着它會在別人的計算機上使用它)requestAnimationFrame會同步到顯示器的VBLANK,並因此會在* all *計算機上更好地工作。 – K3N