我在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