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之多。
发表评论
-
关于动态贴图问题不能动态通过texture改变只能重新new 新material
2012-01-20 01:48 1637关于动态贴图问题不能动态通过texture改变只能重新new ... -
Flex学习收藏资料
2012-01-20 01:48 639Flex学习收藏资料 2010年09月16日 1、《Fl ... -
papervision3d学习笔记:图片墙(1)
2012-01-20 01:48 743papervision3d学习笔记:图片墙(1) 2010年 ... -
[AS3] Alternavta3d7.5教程(一)
2012-01-20 01:48 795[AS3] Alternavta3d7.5教程(一 ... -
广州工作2个月!差人的公司可以call我
2012-01-20 01:48 731广州工作2个月!差人的公司可以call我 2011年06月3 ... -
民国小学生的一篇作文
2012-01-19 09:35 689民国小学生的一篇作文 ... -
小学生作文能力的培养
2012-01-19 09:35 498小学生作文能力的培养 ... -
教小学生写作文1
2012-01-19 09:35 969教小学生写作文1 2011年09月09日 一、小学作文教 ... -
小学生期末评语
2012-01-19 09:35 526小学生期末评语 2010年0 ... -
小学生操行评语
2012-01-19 09:35 659小学生操行评语 2011年0 ... -
神机也有软肋 小米手机
2012-01-17 02:10 676神机也有软肋 小米手机 2011年09月11日 小米手机 ... -
Android中的3D相册
2012-01-17 02:10 1071Android中的3D相册 2011年11月28日 ... -
3D显卡
2012-01-17 02:10 5513D显卡 2011年08月30日 3D 显卡技术术语目前 ... -
揭开Wayland的面纱(一):X Window的前生今世
2012-01-17 02:10 764揭开Wayland的面纱(一):X W ... -
VLC各模块名称及功能介绍
2012-01-17 02:10 900VLC各模块名称及功能介绍 2010年10月28日 [3 ... -
在flex页面中安装AIR程序
2012-01-15 21:42 823在flex页面中安装AIR程序 2010年07月17日 ... -
SWF与SWF交互
2012-01-15 21:42 586SWF与SWF交互 2010年07月23日 在AS2里S ... -
利用反射调用另一个swf里的代码库
2012-01-15 21:42 582利用反射调用另一个swf里的代码库 2011年02月19日 ... -
AIR笔记 使用HTML
2012-01-15 21:42 686AIR笔记 使用HTML 2011年05月17日 a ...
相关推荐
FlexModule_j2ee 是一个专为整合Flex与JSP应用设计的组件库,它提供了一个.jar文件,使得在Java服务器端(JSP)与客户端的Adobe Flex之间建立交互变得更加便捷。Flex是一种强大的富互联网应用程序(RIA)开发技术,...
Flex模块间通信是Adobe Flex应用程序开发中的一个重要概念,它允许不同模块之间共享数据、功能和服务。在大型项目中,模块化设计有助于代码组织和管理,提高代码复用性,同时降低复杂度。本示例将深入讲解如何在Flex...
不要以为我要5分很高,这个绝对是官网资源,其中包含各位最一直在寻找却找不到即使找到也不好用的 flex-bootstrap-jsp.jar flex-bootstrap.jar flex-webtier-jsp.jar flex-webtier.jar
FlexModule_j2ee.zip是一个压缩包,包含了将Flex前端技术集成到JSP(JavaServer Pages)和J2EE(Java 2 Platform, Enterprise Edition)后端环境中的示例工程。这个项目旨在展示如何在传统的Web应用中嵌入富互联网...
the Flex 3 compiler module for J2EE application servers.
Flex 基于 Module 模块的开发是一种有效的软件架构策略,它允许将大型应用程序分解为更小、更易于管理的单元,称为模块。模块化的主要目标是提高代码的可维护性、可扩展性和性能。 1. **模块化的定义与原理** - **...
【Flex Module PPT详解】 Flex Module 是Adobe Flex SDK中的一个重要特性,它允许开发者将大型应用程序分解为更小、更易管理的部分。通过模块化,我们可以创建独立的代码块,这些代码块可以在不同的应用程序中复用...
这将卸载Module,释放其占用的资源,但请注意,这并不意味着Module的类将从内存中完全移除,因为Flex可能会缓存已加载的Module以提高性能。 3. **示例代码**: 在`main.mxml`中,可能包含一个按钮,点击后加载或...
在Flex工程中添加Module的方法是:在FlashBuilder中右键工程目录->Porperties->Flex Modules, 然后就可以add/edit/remove需要的module了, 但问题 是无论添加多少module都要点击add按钮一个一个添加! 像我们的项目一...
这个“Flex综合终极资源”压缩包显然是一份全面的学习和开发资源集合,包括示例代码、官方文档、PDF教程以及可能的相关网站链接,对于学习和提升Flex技术能力非常有帮助。 1. **Flex框架**:Flex框架提供了MXML和...
Flex模块在J2EE环境中的应用,特别是在Lightweight Directory Access Protocol (LDAP) Directory Services (LCD)的上下文中,是一个关键的技术组成部分。LCDS 2.6版本与之前的2.5版本相比,在某些特性上有所调整,这...
在Flex3的Module模块程序设计中,在Google中进行了大量的资料查找,综合比较各个资源后,将我认为最有价值的资料放在这里(全英文的)。 下载包中包括: 1、Adobe Creating Mudule Application.pdf 2、相似例子的源...
《FLEX终极教程大全》是一份综合性的学习资源,涵盖了FLEX初学者到高级开发者所需的知识体系。这个压缩包包含了四个关键部分,旨在帮助用户逐步提升在FLEX开发中的技能和理解。 首先,"整合Flex和Java--配置篇.pdf...
the Flex 3 compiler module for J2EE application servers.
Flex模块(Flex Module)是Adobe Flex框架中的一个重要概念,它允许开发者将大型应用程序分解为多个独立的、可重用的组件,这些组件被称为模块。在Flex应用中,模块可以按需加载,从而优化应用程序的启动时间和内存...
在Flex开发中,`ModuleLoader` 是一个关键组件,它允许开发者动态地加载MX模块(即Flex模块,独立的SWF文件)。`ModuleLoader` 的主要功能是将模块的加载过程与应用程序的其余部分分离,这有助于实现代码的模块化和...
Flex布局,全称CSS Flexible Box Layout Module,简称Flexbox,是CSS3中一种新的布局模式。这种布局模式专门用于更高效地对齐、分布和排序容器中的项目,即使它们的大小未知或是动态变化的。Flexbox的目的是提供一种...