bum*_*ack 6 apache-flex flash optimization
我试图通过优化嵌入的PNG图形(使用ImageOptim工具)进一步减少SWF文件的文件大小.令我惊讶的是,这没有产生任何影响,所以我创建了两个测试图像:
原始(433883字节)
优化(273723字节)
将这些资源中的任何一个嵌入到一个简单的ActionScript项目中时,编译的SWF大小约为274kb.这提出了一个问题:Flex是否在编译期间优化嵌入式PNG资产?如果是,是否有一些关于优化的文档?它不能仅仅因为SWF压缩,因为压缩图像根本不会减少文件大小.
这是完整性代码:
package
{
import flash.display.Sprite;
public class SizeTest extends Sprite
{
[Embed("/assets/original.png")]
private var ImageAsset:Class;
public function SizeTest(){
}
}
}
Run Code Online (Sandbox Code Playgroud)
答案是肯定的,flex 编译器会使用一种 inbult 算法(可能是 ZLIB)自动压缩数据,并在另一端(flash 播放器)透明地解压缩数据,然后您才能访问未压缩的数据。
我将 ByteArray 嵌入到 SWF 中,虽然外部字节很大 (200 KB),但嵌入到 SWF 中时它会变成 30 KB,产生的结果与使用ByteArray.compress("zlib")
.
然后,我尝试手动压缩 PNG/JPEG 位图,结果比直接使用标签嵌入它要大[Embed]
(压缩 ByteArray 为 172 KB,嵌入图像为 168 KB)。让 Flex 编译器处理嵌入式数据压缩实际上比尝试在 ByteArray 方面尝试自己的技巧更好。
编辑:要回答有关 PNG 嵌入的问题,很难判断 Flex 编译器/Flash 播放器内部发生了什么。尽管 Adobe 以正确的文档而闻名,但 Adobe 也以许多“未记录的功能”而闻名。您的具体问题最好发送给 Flash 播放器架构师(例如Tinic Uro)或 adobe 布道者(例如Lee Brimelow),您可以在 Facebook 上轻松联系到其中一些人(请参阅此列表)。