解决 ryanday 的观点,我无法解释额外的 3 个字节,但有一些注意事项......
ActionScript 设计模式一书也因过多的行李不鼓励这样做
是的,在第 115 页,但我认为这是错误的,因此提交了勘误表。
ActionScript 3 规范说,如果您使用“*”,将导入包中的所有公共名称。所以有一个打击,
确实如此,但我不同意这种解释和打击。它说:“包成员的名字是可见的......”(完整)。在这种情况下,它指的是使编译器和编辑器工具可以看到成员的名称,而不是在已编译的 SWF 中可见。ie 并不意味着这些类被编译到 SWF 中——除非它们被实际使用(声明为该类型的变量)。
另一种看待这个的方式,你可以手动导入flash.display.MovieClip
. 但是,如果您不创建任何 MovieClip 实例,MovieClip 类将不会被编译到最终的 SWF 中。
为了满足自己,我以 3 种方式编译了以下 helloworld,按照@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 );
}
}
}
首先,如书面,链接报告:
<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>
其次,删除链接报告文件并将导入更改为:
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.text.TextField;
干净的构建,链接报告看起来完全一样。相同的大小,相同的优化大小,相同的链接类。
三、删除链接报告文件,将imports改为:
import flash.display.*;
import flash.text.*;
干净的构建,链接报告看起来完全一样。相同的大小,相同的优化大小,相同的链接类。
在每种情况下,只有 Sprite 和 TextField 类可以进入 SWF。
查看磁盘上的实际 SWF 文件大小,与 3 个版本相比,似乎确实存在细微的差异(1 或 2 字节)。不比 ryanday 帖子中提到的更大的 SWF 差。