- 浏览: 830849 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (379)
- struts (5)
- hibernate (16)
- spring (16)
- ssh (20)
- MySQL (16)
- 数据库脚本 (2)
- DownLoad (1)
- GAE (5)
- Java (103)
- LoadRunner (2)
- VF (1)
- 学习资料 (24)
- 软件使用 (21)
- 通信类 (4)
- 生活 (3)
- J2ME (1)
- 心理学 (1)
- Linux (26)
- Android (3)
- Oracle (1)
- 面向对象概念&面试准备 (11)
- ExtJs (2)
- Google Map (1)
- Flex (47)
- 算法研究 (1)
- share (20)
- python (1)
- MongoDB (7)
- centos6 (13)
- C++ (8)
- DB2 (3)
- C# (1)
- 代码片段 (24)
- Lucene (2)
- php (1)
- NodeJS (1)
- Express (1)
最新评论
-
shua1991:
已阅,我表示同意。
Eclipse统计代码行数 -
nakedou:
写的不错,挺详细的
在CentOS中使用 yum 安装MongoDB及服务器端配置 -
sjp524617477:
好方法
Eclipse统计代码行数 -
simpletrc:
<script>ale ...
Java写到.txt文件,如何实现换行 -
csdn_zuoqiang:
Apache Ftp Server,目前是1.0.4,非常好的 ...
Apache FtpServer在64位系统下服务不能启动解决方法
随着Flex越来越多的被人们所熟知,越来越多的互联网也开始了RIA应用
。众所周知,目前国内的宽带应用并不是像很多发达国家发达,个人应用带宽基本上都是2M以下的,怎么样能够使你的Flex应用能够流畅的运行在客户端的问题,成为了制约每个Flex应用开发
程序
员的大难题。
在这里,我收集整理了一下网络上关于这方面经验,欢迎大家补充。
基本原则:
1. 从外部加载
媒体(Media)
Heider提到了一个常用的Flex最佳实践——限制嵌入到应用/SWF文件
中的媒体的数量,如图像、影片及mp3等资源都可以从外部的SWF文件加载。
Flex框架
可以直接将图片、mp3及字体等资源编译
到SWF中。当你想让最终用户获得全部资源时,这种方式确实能派上用场,但是这会导致你的应用长时间停留在“Loading”阶段。
2. 在嵌入式字体中限制字符集
Heider建议在嵌入式字体中限制字符集以降低SWF文件的总下载时间:
当你在Flex中嵌入一种字体时,你就会获得该字体的全部字符的支持。尽管这可能是你想要的,但你确信你需要全部字符么?例如,在一个只面向英文的应用中,你确信你真的想花时间下载中文字符数据
么?
3. 缓存框架
Heider回顾了Flex 3 support for runtime-shared-libraries (RSL)这篇文章:
从Flex 3开始,你可以将Adobe
签
名的框架——RSLs缓存到Flash Player的cache中。这有两个好处。首先,缓存在Flash Player
cache中的签名的框架RSLs可由所有配置好的Flex应用共享。换句话说,如果某人的应用已经下载了500k的签名的框架RSL,并且该RSL仍旧
在Flash Player cache中,那么你的应用就可以使用缓存下来的RSL。其次,即使某人清空了其浏览器缓存,对Flash Player
cache也没有任何影响。
4. 考虑模块化
Heider谈到了将Flex应用划分成模块的好处:减少字体加载时间的另一种方式就是将你的Flex应用划分成模块。使用模块的一个好处在于当加载和卸载模块时你能完全操控它。
之所以要划分成模块的最后一个原因是他们更快,而且我能即时加载它们。换句话说,在启动时唯一需要加载的模块就是 Step1.swf
模块。因此,在使用模块的情况下,最终用户节省了启动时间,但是当他从一个模块切换到另一个模块时却需要花更多时间,因为每个模块都需 要以JIT形式加载。在我的应用中,只有当用户首次在steps 1-5之间切换时需要花更多时间。
5. 推迟实例化
Heider围绕着Flex组件
的“creationPolicy”属性及何时实例化应用的不同部分给出了很多建议。
如果你想减少从数据下载到用户真正可以使用的总时间,当务之急就是推迟实例化。这项技术背后的理念就是直到应用真正使用的时候才在内存中创建对象
。
尽管推迟实例化技术会在应用的整个使用过程中导致少许——通常不那么明显——的延迟,但与长时间的启动延迟相比,它还是可接受的。推迟实例化的另一个好处在于内存使用的优化。
以上原则来自Jun Heider在O’Reilly的InsideRIA站点上发表了一篇精彩的文章,该文章就如何加快Flex应用的启动速度
提
出了很多建议,以帮助用户减少看见讨厌的“Loading”对话框的出现时间。他深入探讨了问题的不同方面,并对每种技术的优势和劣势进行了评判。
Heider还谈到了一个“实验性”的条款——“使用流”,这是他在讨论Dirk Eismann的帖子(Building monolithic
Flex SWFs that still startup quickly.”)时谈及的。Eismann提出一项技术以利用Flash
Player中的多个frames以在部分应用中达到流的目的。查看所有的帖子以更多地了解该技术及关于加快Flex启动速度的建议。
内存释放优化原则
1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉;
2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除;
3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null;
4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉;
5. 除了引用需要删除外,系统组件或者全局工具
、管理类如果提供了卸载方法的就一定要调用
删除内部对象,否则有可能会造成内存泄露和性能损失;
6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除;
7. 如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除;
8. 注册的事件
如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。
9. 父对象被删除了不代表其余子对象都删除了,找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。
内存泄露举例:
1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null;
2. 系统类泄露:使用了系统类而忘记做删除操作了,如BindingUtils.bindSetter(),ChangeWatcher.watch()函数
时候完毕后需要调用ChangeWatcher.unwatch()函数来清除引用 ,否则使用此函数的对象将不会被删除;
类似的还有MUSIC,VIDEO,IMAGE,TIMER,EVENT,BINDING等。
3. 效果
泄露:当对组件应用效果Effect的时候,当本对象本删除时需要把本对象和子对象上的Effect动画
停止掉,然后把Effect的target对象置null; 如果不停止掉动画直接把 Effect置null将不能正常移除对象。
4. SWF泄露:要完全删除一个SWF要调用它的unload()方法并且把对象置null;
5. 图片泄露:当Image对象使用完毕后要把source置null;(为测试);
6. 声音、视频泄露: 当不需要一个音乐或视频是需要停止音乐,删除对象,引用置null;
内存泄露解决方法:
1. 在组件的REMOVED_FROM_STAGE事件回掉中做垃圾处理操作(移除所有对外引用(不管是VO还是组件的都需要删除),删除监听器,调用系统类的清除方法)
先remove再置null, 确保被remove或者removeAll后的对象在外部的引用全部释放干净;
2. 利用Flex的性能优化工具Profile来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;
总结:关键还是要做好清除工作,自己设置的引用自己要记得删除,自己用过的系统类要记得做好回收处理工作。 以上问题解决的好的话不需要自定义强制回收器也有可能被系统正常的自动回收掉。
发表评论
-
Flex Spark皮肤定制
2011-08-03 23:18 1014转自 http://www.cnblogs.com/twave ... -
自定义ItemRenderer常遇到的警告unable to bind to property的解决办法
2011-08-03 22:02 1238<?xml version="1.0&q ... -
Flash Builder 代码格式化工具 Flex Formatter 下载地址
2011-08-03 17:09 1263http://sourceforge.net/projects ... -
提高Flex程序性能的10个秘诀
2011-07-29 09:20 837规则 # 1: 打扫代码 一般来说,保持代码清洁是一 ... -
关于Flex4,textArea控件的htmlText属性被和谐。。。
2011-06-15 11:18 4826最近做的项目是网页游戏的聊天系统和好友系统,以前喜欢用fl ... -
修改flash builder注释里的@author
2011-06-15 00:18 2091在flash builder里,按Ctrl+Shift+D ... -
AS3中String转换成Boolean
2011-05-27 12:07 3439AS3中String转换成Boolean的规则和Java不一样 ... -
用 File.applicationDerectoryPath.resolv("text.txt")会报SecuriyError错误!
2011-05-26 16:26 1024用 File.applicationDerectoryPath ... -
关于actionscript3.0 中 ResourceBundle 绑定国际化资源文件
2011-04-02 20:17 1323一个简单的示例项目:mpcs LangUtil.a ... -
AIR2.0新特性
2011-03-24 10:29 1238按照类型用默认的程序打开文件 在AIR2.0中,你可以使 ... -
FlashSocket通信安全策略一点心得
2011-03-06 10:29 13681、问题描述 将flash发布为html格式 ... -
理解Loader、Bitmap和BitmapData对象之间的关系
2011-02-15 18:58 4091在Loader对象实例中,被 ... -
AS3 dynamic class
2011-02-13 14:58 2978动态类 “动态”类定义在运行时可通过添加/ 更改属性和方法来 ... -
Array的SortOn排序
2011-01-29 19:53 4061sortOn () 方法 AS3 func ... -
通过Http post方式发送json,然后获取返回的json
2011-01-24 20:36 14183思路:将发送的json转换为xml 示例代码 ... -
在JPanel中,如何将.png格式的图片设置为背景?
2011-01-18 20:14 1721yourJPanel.setBackgroundDecorat ... -
Flash中所支持的Html标签
2011-01-18 19:23 931Flash中所支持的Html标签 <a& ... -
AsWing JList
2011-01-18 14:24 2506JList类似于flex的dataGroup控件,可以自己定义 ... -
AS3.0的Socket通讯发送固定字符串(指定编码)
2011-01-12 17:08 1776flash客户端与服务端传输中文出现乱码的问题C++服务端每次 ... -
flex谷歌地图中国各级地区详细信息实例
2011-01-07 16:35 2520<?xml version="1.0" ...
相关推荐
随着Flex越来越多的被人们所熟知,越来越多的互联网也开始了RIA应用。
学习了Flex,主要是被它的炫丽的外表所吸引,但用起来,性能却是很大问题,这里有教你性能上的调优
这个文档是关于flex怎么优化的,因为flex对机器的要求比较高,所以在开发项目的时候会想到怎样优化,而这个文档就提供了具体的方法。
常用Flex网站常用Flex网站常用Flex网站常用Flex网站常用Flex网站常用Flex网站
flex builder 优化
flex优化全集flex优化全集flex优化全集flex优化全集flex优化全集
flex编译优化方法,以及Flex工程编译慢的优化方案
基于flex性能测试的一些简单流程描述和测试方法
FlexBuilder3 常用 快捷键的DOC文档大家随便下载啦。
公司内部资料:遍寻网络资源和相关书籍,历经磨难(网上说的好多都不靠谱),经过自己的理解和实践,总结出来一套可行方案,以供各位Flex开发爱好者们参考交流
这是作者自己亲自编写的教程,里面包含的有图解教程,各式jar,及配置文件,全部包含在内,如果你是一个决定学习flex初学者,我敢保证它肯定适合你!带上你走上flex开发旅途!
FLEX 数据绑定 Flex HTTPservice使用 Flex 创建自定义事件。 其它入门基础等。
Flex 性能简介 pdf 网络上收集的 希望对大家有帮助 初次上传多多关照
本文主要是我对Flex学习的总结,以供大家学习参考。
老外写的Flex优化指南,内容很精彩,不容错过
flex 常用 知识 问答 flex 常用 知识 问答 flex 常用 知识 问答
FLEX内存释放优化原则,内存泄露解决方法,内存泄露情况
flex常用的几种动态菜单
第一章 Flex简介和开发环境 第二章 AS3语法 第三章 事件驱动 第四章 自定义事件 第五章 数据绑定 第六章 样式表和主题 .....实习之
Flex性能,内存管理和对象缓存,玩Flex的朋友可以看看。