Flex Module 终极减肥篇之去掉最后哪一点赘肉
2009年09月15日
今天看了篇很不错的为flex编译后的文件swf文件“减肥”,不错的文章拿来了哈哈~
首先声明,如果您不是一个狂热的Flex Module减肥发烧友,如果您觉得Flex Module体态已经够轻盈了,那么下面的文章您大可不必看了。
减肥总是要付出一定代价的,我们的目的是如何在付出最小代价的情况下,轻松减去一身赘肉。
本文不是讨论如何设置编译参数进行优化,来达到减肥的目的,如果您是减肥人士,相信一些基础知识都应该具备了。
创建一个最简单Flex Module,哪怕里面什么也不放,编译后的swf文件会有37k左右,进行编译优化后,也仅能减小到26k左右,具体大小视Flex SDK的版本而定,本人用的是Flex SDK 3.2。
菜鸟:“天哪!还没开始写,就30多k啦?俺算算,这个30K是压缩后的,两个'prototype'有了,一个'JQuery'也不差多了。老早就听说Flex程序素以体型硕大而著称,后经人指点,教俺把程序拆为Module,可如今一试,乖乖的不得了,光皮重就30K。”
减肥发烧友不屑的说道:“有啥大惊小怪的,肉多了,减掉不就得了嘛。”
菜鸟怯怯的问:“敢问大侠,能减到多小呢?”
"1k以下吧",减肥发烧友淡淡的说道。
"哇!!!",菜鸟吐了吐自己舌头,"这怎么可能!这怎么可能!1比30!!!"
减肥发烧友又是不屑:“你本来就没写什么东西,1k以下当然是正常情况,可偏偏有人把30k的叫做正常。”
菜鸟若有所思:“是啊,你看那帮做js,天天想着就是js怎么压缩,生怕它太大。Flex的世界里,胖好像是天经地义的,胖是正常的,因为我们的最小的Module也没达到过1K。”
言归正传,有感于Flex中生成的Module偏大,可能是考虑到Module要适应不同的复杂场景。可现实中不见得需求就那么复杂,简单的问题应该有简单的解决办法,研究了一下Module减肥的方法,归纳出来两种方式:
第一种 实现自己的ModuleLoader,该方式因加载出来的Module不太稳定,暂没想到好的解决方式,待完善后再公布出来。
第二种 ModuleLoader还是用Flex自带的,写Module时,实现自己的ModuleFactory
首先创建一个Flex组件(不是模块),该组件可以继承任何Flex组件,但就是不能继承Module(标准的Module写法是继承Module,但这样编译出来的swf会很大),该组件可称为MyModule
然后创建一个AS3类,此处可称为MyModuleFactory,该类主要负责创建MyModule的实例
Java代码
package { import flash.display.Sprite; import flash.events.Event; import flash.system.ApplicationDomain; import flash.utils.setTimeout; import mx.core.IFlexModuleFactory; public class MyModuleFactory extends Sprite implements IFlexModuleFactory { public function MyModuleFactory() { super(); setTimeout(function(){ dispatchEvent(new Event("ready")); },0); } public function create(...args):Object { return new MyModule(); } public function info():Object { return {currentDomain:ApplicationDomain.currentDomain}; } } } package{ import flash.display.Sprite; import flash.events.Event; import flash.system.ApplicationDomain; import flash.utils.setTimeout; import mx.core.IFlexModuleFactory; public class MyModuleFactory extends Sprite implements IFlexModuleFactory { public function MyModuleFactory() { super(); setTimeout(function(){ dispatchEvent(new Event("ready")); },0); } public function create(...args):Object { return new MyModule(); } public function info():Object { return {currentDomain:ApplicationDomain.currentDomain}; } }}
最后设置项目属性,添加模块,将MyModuleFactory设为模块(注意不是MyModule)
注意事项:
1 Module要想最小,一定要把其他依赖的Lib库设置成运行时共享库
2 编译主应用程序的时候,设置编译选项-keep-all-type-selectors=true,否则加载出来的模块,里面的部分组件会丢失样式,甚至报空指针错误
实际应用中没有出现过大问题,原来一个80k的模块,减肥后变成30k,减掉50k之多。
发表评论
-
Notepad2 V4.1.24.62 免费版 是一个外观类似系统记事本的文本编辑工具
2012-01-20 10:08 611Notepad2 V4.1.24.62 免费版 是一个外观类似 ... -
简析HTML七种网页加密解密方法
2012-01-20 10:08 818简析HTML七种网页加密解 ... -
IIS服务器排错指南及错误代码大全
2012-01-20 10:08 843IIS服务器排错指南及错误代码大全 2011年06月22日 ... -
游侠在线自由测试版正式发布啦!!!
2012-01-20 10:08 654游侠在线自由测试版正式发布啦!!! 2010年08月26日 ... -
Javascript加密解密终级指南escape解密/eval加密/Encode加密原理
2012-01-20 10:08 739Javascript加密解密终级指 ... -
幼儿园小班下学期班级工作计划
2012-01-19 15:09 1066幼儿园小班下学期班级工作计划 2011年06月04日 一 ... -
幼儿园大班下学期幼小衔接工作计划
2012-01-19 15:09 849幼儿园大班下学期幼小 ... -
幼儿园大三班下学期班级工作计划
2012-01-19 15:08 910幼儿园大三班下学期班 ... -
幼儿园大班下学期工作计划
2012-01-19 15:08 883幼儿园大班下学期工作 ... -
幼儿园大班下学期班级工作计划
2012-01-19 15:08 757幼儿园大班下学期班级工作计划 2011年03月12日 新 ... -
C++/CLI
2012-01-17 04:56 594C++/CLI 2010年08月12日 从2001年.n ... -
TGraphic
2012-01-17 04:56 693TGraphic 2010年06月10日 ... -
【教程】Android系统手机 菜鸟扫盲汇总
2012-01-17 04:56 997【教程】Android系统手机 菜鸟扫盲汇总 2011年10 ... -
Android 系统简单介绍
2012-01-17 04:55 1078Android 系统简单介绍 2011年11月20日 写 ... -
行云流水
2012-01-17 04:55 706行云流水 2010年06月03日 行至水穷处,坐看云起 ... -
位图梯形化(as3.0)
2012-01-16 03:46 903位图梯形化(as3.0) 2010年04月01日 ... -
AS3.0打造随风吹散效果
2012-01-16 03:46 771AS3.0打造随风吹散效果 2010年07月29日 在这 ... -
藏经阁
2012-01-16 03:46 546藏经阁 2009年07月21日 藏经阁 ... -
SWF与SWF交互
2012-01-16 03:46 636SWF与SWF交互 2010年07月23日 在AS2里S ...
相关推荐
Flex Module间通信 此例给大家展示一个使用了模块(Module)的简单的Flex程序,你可以从中获得启示。
不要以为我要5分很高,这个绝对是官网资源,其中包含各位最一直在寻找却找不到即使找到也不好用的 flex-bootstrap-jsp.jar flex-bootstrap.jar flex-webtier-jsp.jar flex-webtier.jar
FlexModule_j2ee Flex 与JSP 整合用的.jar 文件 Jsp 中引用Flex 标签
the Flex 3 compiler module for J2EE application servers.
通过这个工程可以实现flex页面嵌入到jsp中。
Flex基于Module模块的开发文档主要介绍涵盖基本所有: 1、模块化的定义与原理; 2、模块化的作用; 3、模块化的优点; 4、flex与模块通信,直接调用模块(module)方法及示例代码; 5、flex基本控件用法及示例代码;...
在Flex工程中添加Module的方法是:在FlashBuilder中右键工程目录->Porperties->Flex Modules, 然后就可以add/edit/remove需要的module了, 但问题 是无论添加多少module都要点击add按钮一个一个添加! 像我们的项目一...
来自ITEYE,具体是哪位的分享记不得了- - 里头的demo详细演示了flex module的使用和flex module的通讯
在Flex3的Module模块程序设计中,在Google中进行了大量的资料查找,综合比较各个资源后,将我认为最有价值的资料放在这里(全英文的)。 下载包中包括: 1、Adobe Creating Mudule Application.pdf 2、相似例子的源...
Flex综合终极资源,包含示例代码、官方文档、优秀PDF、网站。
一个有关 flex module 讲解的详细ppt
the Flex 3 compiler module for J2EE application servers.
在动态加载module时,容易出错,这是因为加载以后需要卸载,请看示例代码,可运行。
flex中moduleLoader动态加载module时传递参数源代码
FLEX播放器 flex 开发AIR及Flex之mp3播放器教程 FLEX播放器 flex 开发AIR及Flex之mp3播放器教程
Flex学习之配置篇-如何在Eclipse中开发Flex , 主要是如何在MyEclipse中安装和使用Flex Builder 插件 带你进入Flex的世界
flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图flex 地图...