【问题标题】:Added code, swf size got ... smaller?添加了代码,swf 大小变小了?
【发布时间】:2008-10-27 19:19:11
【问题描述】:

...我正在研究几种理论,但我很想听听其他意见。

这已经在三台不同的机器上得到验证,两个 Windows 另一个 linux。使用的编译器是flexbuild(大概是mxmlc)和ant with mxmlc。

我们将代码添加到一个小的独立单个 .as 文件项目中,编译后的 swf 文件大小减少了 20k,在 linux 机器上从 32k 减少到 12k。 windows 盒子上略有不同,从 27k 到 8.5k。

通过自定义工具,我们验证了两个版本都使用本机 swf 压缩,没有大量额外的元数据,对 ant 构建脚本的唯一修改是在构建中添加一个 swc 文件。

没有删除代码(没有删除导入,没有删除变量,nada),只有添加并且非常简单,添加了几个组件到阶段,启用,几个小功能等,没有修改循环,没有什么明显的东西会导致更少的代码。

使用源代码管理来构建旧版本仍然会导致文件变大,因此这似乎不是库或编译器的变化。

没有任何代码使用 Flex 组件,只是直接导入“flash.etc...”类型。

有人见过这样的行为吗?您认为这可能是什么原因造成的?

【问题讨论】:

    标签: compiler-construction flash filesize


    【解决方案1】:

    以前在 .NET 程序集中看到过这种行为。

    我对这种行为(无论它发生在哪里)的猜测是,无论添加什么,编译器都可以进行比以前更多的优化。

    为什么这可能需要比我更详细地了解编译器的内部工作原理(以及为什么会发生这种情况——如果这实际上是这里的原因——在你的情况下,可能只能得到充分的解释由 Adob​​e 工程师)。

    【讨论】:

    • 这也是我们目前的猜测。顺便说一句,我们正在导入的代码中可能存在循环,但我们实际上并没有任何循环,它都是由极少数实际事件驱动的事件。我们确实添加了一个用于超时检查的计时器。
    【解决方案2】:

    我只是在猜测,但是当涉及到这么小的文件时,也许您会看到硬盘驱动器扇区的松弛?

    【讨论】:

    • 这不会导致超过 4K 的差异(即 NTFS 磁盘上的最大正常集群大小)。此外,不同操作系统之间存在 20K 差异这一事实导致得出的结论是它与闪存相关,而不是与系统相关。
    • Miki,这是人们最先看的地方之一。我没有明确表示我们已经排除了这种可能性。对其他人来说,我认为这个答案不值得投反对票。
    【解决方案3】:

    我的第一个预感是第一个 swf 是在调试模式下编译的,它添加了一堆信息。如果不是这种情况,那么我猜第二个是用 -optimize=true 编译的。

    但如果两者都不是,那确实非常很有趣!

    【讨论】:

    • 两者都不是,对构建标志的唯一修改是添加了 swc 库文件。
    【解决方案4】:

    我以前也看到过同样的行为。我认为这是两个因素的组合:优化和压缩。您的新代码可能允许优化器以不同的方式做事(或者,不直观地,阻止了它之前所做的某种内联或循环展开)。我会说存在的额外数据更有可能使其成为更好的压缩候选者,因为所有闪存文件都被压缩,因此压缩它的效率更高。这两种理论都只是半知半解的猜测。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-08
      相关资源
      最近更新 更多