我得到了几个对象,其中每个对象都具有优先级值。优先级值可以在1(最低)到200(最高)之间。
每个值用颜色表示,最低值用绿色"rgba("0","255",0,1)";
表示,最高值用"rgba("255","0",0,1)";
我通过经典方程计算颜色值,其中每个优先级值确定不同的值(不同的颜色)。因此,最终我有机会根据优先级从绿色(0)到黄色(100)到红色(200)的200种不同颜色。
我的问题是:当我每100毫秒在画布上重绘所有对象时。每次计算这些值以获得所需颜色或仅在初始化函数中生成ONCE更好200个颜色的数组,其中array[100]
上的值将是具有100个优先级的对象的颜色。
我希望不会有很大差异,但仍然有一种方法必须更好。
答案 0 :(得分:2)
在几乎每种情况下(通常称为查找表),计算一次是更好的选择。内存比CPU周期便宜,这意味着消费类硬件有足够的RAM,但总是需要周期。
在这种情况下,你是对的,即使在16.666 ... ms(60fps)的全帧速率下,每100毫秒200种颜色是微不足道的,但是客户端将在设备上运行许多应用程序/选项卡/服务以及程序员执行的任何操作减少CPU负载将使客户受益。
程序员往往会忘记一个额外的好处。 CPU周期比内存需要更多的功率。对于一台机器而言,增加几百万个周期并不算什么,但如果每个程序员都以降低总体负载的方式编写,那么全球范围内的功耗节省相当可观。我现在要去拥抱一棵树,希望有所帮助。
答案 1 :(得分:0)
从问题我明白你不想要计算颜色来影响你的动画,使用Web worker在单独的线程上运行计算Web Workers
还有一件事一次读取所有样式并且一次写入样式不会一起读/写,因为它可能导致布局抖动Layout Thrashing