【问题标题】:Efficiency of PVectors vs two separate variables in Processing.jsPVectors 的效率与 Processing.js 中的两个独立变量
【发布时间】:2016-07-18 19:44:59
【问题描述】:

我正在创建两个数组来保存我想要绘制的点的 x 和 y 值。当我这样做时,我想起了我最近了解的 PVectors,而是创建了一个 PVectors 数组,而不是我最初的两个。在给定大量 x 和 y 值的情况下,哪种方法更有效并且会减少浏览器延迟?

【问题讨论】:

    标签: processing processing.js


    【解决方案1】:

    您为什么不尝试两者并找出答案?创建一个包含 1,000 个 PVectors 的数组,并将其与创建具有 1,000 个 float 值的数组进行比较。将其增加到 10,000、100,000 或 1,000,000。

    在每种情况下都在屏幕上显示frameRate 变量。 (不要使用println(),它太慢了——改用text() 函数!)你什么时候注意到它开始下降?

    这看起来像是在用一个问题来回答您的问题,但回答有关性能问题的最佳方式是自己尝试一下,进行一些基准测试和分析,然后确定在您的特定环境中什么是最好的。

    但我怀疑您是否会注意到这两种情况的巨大差异。速度可能是相同的。您可能注意到的唯一区别是使用PVector 可能会使用更多内存。但同样,可能还不足以真正关心。

    不要担心这种优化(这是一种过早的优化或微优化),您应该使用对您最有意义的方法。代码的可读性和可维护性比这样的小事情更重要,所以只要在你的程序中使用看起来更合乎逻辑的东西。

    【讨论】:

    • 我听从了您的建议,创建了这样一个程序。我发现,如果我不限制 x 和 y 值的数量,三分钟后,我的帧率在这两种情况下都从 60 下降到 30 以下。 Pvector 阵列在三分钟后快了大约三帧。这就是事情变得有趣的地方。由于施加了 200 帧的限制,这两种方法都没有动摇或滞后,并且或多或少地保持在每秒 60 帧。但是,当我施加 2000 的限制时,PVector 阵列在三分钟后将帧速率拖到每秒 40 帧,而 2 阵列并没有动摇并保持在 60。
    • @EmmaCooper 我很想看看你的代码。为什么您的延迟会随着时间的推移而恶化?
    • 我可以解释一下,但我认为向您展示会更容易。这是一个链接:khanacademy.org/computer-programming/lissajous-curve/…
    • @EmmaCooper 很有趣,感谢您的链接。我感到困惑的原因是:如果您将对象的数量限制为 2000,那么您将拥有的最大对象是 2000。这不像 3 分钟或 10 分钟后您将拥有超过 2000 个对象,或者24小时。所以随着时间的推移它变得越来越慢似乎很奇怪。
    • 抱歉,本可以澄清我的意思。在 2000 的限制下,PVector 帧速率只减慢到 40,但一旦达到 40,它就一直停留在那里。阵列帧速率从未离开过 60。这两个值对我来说都是有意义的。你觉得它们对吗?
    最近更新 更多