2013-06-12 31 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行),因此每帧中每个像素的每次计算必须将文本转换为数字!

三个小加号固定它。

相关问题