aclibでアプリキャストのノード操作を100倍高速化する
アプリキャストでは、getPosX()、 getW()、などノードの属性値を取得する関数がめっぽう遅いです。
// ベンチマーク function bench(f) { var d = Date.now(); for (var i = 0; i < 100; i++) f(); print(f.name + ' -> ' + (Date.now() - d) + ' msec'); } var node = getNode('foo'); bench(function getPosX1() { getPosX(node); }); bench(function setPosX1() { setPosX(node, 10); });
// 結果 getPosX1 -> 1563 msec setPosX1 -> 16 msec
get系がset系に比べてめちゃくちゃ遅いことがわかります。
上記はエミュレータでの計測結果ですが、実際のTVでも同じくらい遅いです。
aclibのNodeオブジェクトでは、
一度取得したノードの属性値をキャッシュするため、2回目以降のget系の操作を高速化することができます。
// ベンチマーク var node = new Node(getNode('foo')); bench(function getPosX2() { node.getPosX(); }); bench(function setPosX2() { node.setPosX(10); });
// 結果 getPosX2 -> 15 msec setPosX2 -> 16 msec
getPosX が100倍早くなっています(100回イテレーションしているので当たり前ですが)。
このようにaclibを使うとノードの属性値を繰り返し参照するような場面では、かなりの高速化をすることが可能です。
もちろんsetPosXなどでノードの属性値が更新されると、同時にキャッシュ情報も更新されますので、利用者はそのあたりの整合性に煩わされる心配はありません。