【发布时间】:2014-09-15 13:37:30
【问题描述】:
我编写了一个 javascript 程序,它用接近边界的正常漂亮颜色绘制 Mandelbrot 集。我正计划下一步添加缩放功能,但它太慢了,不明智。
我在这里发布了代码中最重要的部分:
while (x * x < 2 && y * y < 2 && iteration < max_iteration) {
xtemp = (x * x) - (y * y) + xcord;
y = (2 * x * y) + ycord;
x = xtemp;
iteration = iteration + 1;
}
并在此处链接到带有整个页面的 jsfiddle:http://jsfiddle.net/728dn2m0/
我有一些全局变量可以带入主循环,但这会导致对每个像素进行额外的计算。我在另一个 SO question 上读到,1x1 矩形的替代方法是使用图像数据,但性能差异存在争议。另一种可能性是将 while 语句重写为其他条件循环,但我不相信这会给我带来我正在寻找的收益。
我认为自己是一个新手,所以我很高兴听到 cmets 在代码的任何方面,但我真正追求的是能够大幅提高性能的东西。我怀疑我对浏览器中的 javascript 可以管理什么的期望是不合理的,但我希望我错过了一些重要的东西,并且有很大的收获。
提前致谢, 安德鲁
【问题讨论】:
-
因为严格意义上没有具体问题,所以这个问题可能更适合代码审查。
-
如果这样会更好,我很乐意移动它。是否可以移动一个问题,或者我需要创建一个新问题并以某种方式删除这个问题?
-
我的评论更像是一个建议。我检查了 jsfiddle,我对性能有点惊讶;我注意到您的逃生条件不是通常所做的;我认为应该是
x*x+y*y<2而不是x*x < 2 && y*y<2。 -
我已尝试按照您的建议更改转义条件,但性能没有变化。这来自维基百科:“因为实部或虚部大于 2 的复数不能成为集合的一部分,所以当任一系数超过 2 时,常见的救助措施是逃避。”这就是为什么我将转义条件编码为两个独立的测试。我现在是 GMT+7,所以我要睡觉了,我要再过 17 个小时才能再次回复。我没有失去兴趣!
-
@user1977132: "任一系数超过 2" 为
(x < 2 && y < 2)。
标签: javascript performance fractals mandelbrot