Addressing ryanday's points, I can't explain the extra 3 bytes, but a few notes...
"The ActionScript Design Patterns book also discourages this due to excess baggage"
Yep, on page 115, but I think it is wrong and submitted errata to that effect.
"The ActionScript 3 spec says all public names from the package will imported if you use the '*'. So there is a hit, "
It kind of does, but I disagree re the interpretation and hit. It says: "The names of package members are made visible..." (in full). In this context, it is referring to making names of members visible to the compiler and editor tools, not visible within the compiled SWF. i.e. does not mean the classes get compiled into the SWF - unless they are actually used (a variable declared of that type).
Another way of looking at this, you could manually import flash.display.MovieClip
. But if you don't create any instance of MovieClip, the MovieClip class will not get compiled into the final SWF.
To satisfy myself, I compiled the following helloworld in 3 ways, outputting link-report as suggested by @secoif...
package
{
import flash.display.Sprite;
import flash.text.TextField;
public class ASHelloWorld extends Sprite
{
public function ASHelloWorld()
{
var tf:TextField = new TextField();
tf.text = "Hello World!";
addChild( tf );
}
}
}
First, as written, link report:
<report>
<scripts>
<script name="~/Documents/eclipse3.5carbonFbPlugin-FX4-LS10/ASHelloWorld/src/ASHelloWorld.as" mod="1278415735000" size="682" optimizedsize="344">
<def id="ASHelloWorld" />
<pre id="flash.display:Sprite" />
<dep id="AS3" />
<dep id="flash.text:TextField" />
</script>
</scripts>
<external-defs>
<ext id="AS3" />
<ext id="flash.text:TextField" />
<ext id="flash.display:Sprite" />
</external-defs>
</report>
Second, delete the link report file and change imports to:
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.text.TextField;
Clean build, and the link report looks exactly the same. Same size, same optimizesize, same linked classes.
Third, delete the link report file and change imports to:
import flash.display.*;
import flash.text.*;
Clean build, and the link report looks exactly the same. Same size, same optimizesize, same linked classes.
Only Sprite and TextField classes make it to the SWF in each case.
Looking at the actual SWF file size on disk, there does seem to be a slight (1 or 2 byte) variation over the 3 versions. No worse than for the larger SWF referred to in ryanday's post.