Type Checking
From ActionScript Performance Wiki
Contents |
Purpose
See the fastest way to find out an objects type. This also includes a variant where each object has a value name.
Code
package { import flash.display.Sprite; public class Test extends Sprite { public var testSprite1:Sprite = new TestSprite1(), testSprite2:Sprite = new TestSprite2(), testSprite3:Sprite = new TestSprite3(), testSprite4:Sprite = new TestSprite4(); public var current:Sprite; public var i:Number; public function Test() { current = testSprite4; trace(new PerformanceComparison(1000000, test1, test2, test3, test4).start()); } protected function test1():void { if (current.name == "sprite1") { i = 1; } else if (current.name == "sprite2") { i = 2; } else if (current.name == "sprite3") { i = 3; } else if (current.name == "sprite4") { i = 4; } } protected function test2():void { switch (current.name) { case "sprite1" : { i = 1; break; } case "sprite2" : { i = 2; break; } case "sprite3" : { i = 3; break; } case "sprite4" : { i = 4; break; } } } protected function test3():void { if (current is TestSprite1) { i = 1; } else if (current is TestSprite2) { i = 2; } else if (current is TestSprite3) { i = 3; } else if (current is TestSprite4) { i = 4; } } protected function test4():void { switch (true) { case (current is TestSprite1) : { i = 1; break; } case (current is TestSprite2) : { i = 2; break; } case (current is TestSprite3) : { i = 3; break; } case (current is TestSprite4) : { i = 4; break; } } } } } import flash.display.Sprite; internal class TestSprite1 extends Sprite { public function TestSprite1() { name = "sprite1"; } } internal class TestSprite2 extends Sprite { public function TestSprite2() { name = "sprite2"; } } internal class TestSprite3 extends Sprite { public function TestSprite3() { name = "sprite3"; } } internal class TestSprite4 extends Sprite { public function TestSprite4() { name = "sprite4"; } }
Results
Compiler version: 3.3.0.485, Player version: MAC 10.0.2.54, Operating System: Mac OS 10.5.8
- Test 1
- 1389 ms, 73% slower
- Test 2
- 1036 ms, 29% slower
- Test 3
- 804 ms, best
- Test 4
- 946 ms, 18% slower
Compiler version: 3.3.04852, Player version: WIN 10.0.45.2, Operating System: Windows XP
- Test 1
- 1020 ms, 56% slower
- Test 2
- 796 ms, 22% slower
- Test 3
- 655 ms, best
- Test 4
- 792 ms, 21% slower
Conclusion
Directly testing for the objects type using is in if, else if blocks is much faster than any other tested method. Note however that the entire type checking can be circumvented using polymorphism (calling a method or property directly on the object instead of trying to find out its type).

