javascript - 改进 Javascript Mandelbrot 绘图性能

标签 javascript performance fractals mandelbrot

我写了一个 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 问题上读到,1x1 矩形的替代方法是使用图像数据,但性能差异存在争议。另一种可能性是将 while 语句重写为其他一些条件循环,但我不相信这会给我带来我正在寻找的 yield 。

我认为自己是新手,所以我很高兴听到对代码的任何方面的评论,但我真正追求的是能够大幅提高性能的东西。我怀疑我对浏览器中的 javascript 可以管理什么的期望是不合理的,但我希望我遗漏了一些重要的东西并且可以找到很大的收获。

提前致谢, 安德鲁

最佳答案

使用 setInterval 作为外部循环结构会减慢计算速度。您将单个像素设置为 5 毫秒,但是整个 Mandelbrot 图计算可以在 1 秒内完成。因此,对您的函数的一次调用会非常快速地绘制一个像素,然后等待大约 5 毫秒的 99.99%。

我换了

if (m<=(width+1))

while (m<=(width+1))

并删除了 setInterval。

通过这种方式,整个计算一步完成,无需刷新屏幕,也无需使用 setInterval 作为外部循环构造。我 fork 了你的脚本并修改了它:http://jsfiddle.net/karatedog/2o4gjrv2/6/

在脚本中,我修改了 (x*x < 2 && y*y < 2) 的救助条件至 (x < 2 && y < 2)就像我在之前的评论中建议的那样并揭示了一些隐藏的像素,检查差异!

关于javascript - 改进 Javascript Mandelbrot 绘图性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25849412/

相关文章:

arrays - 当数组更快时为什么要使用列表?

java - Java 中毕达哥拉斯树的可视化表示

c++ - Mandelbrot集的多线程计算

javascript - 迭代为数组但仍可通过键访问

javascript - 在 Angular.js 中连接模型

javascript - 过滤组合框不适用于常见商店组合

c# - 使 C# mandelbrot 绘图更高效

javascript - 分享这个脚本被另一个脚本替换

c - 全局变量性能效果(c、c++)

android - ANativeWindow_lock 和 AndroidBitmap_lockPixels