- 浏览: 395736 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (325)
- 神经网络 (1)
- javascript (11)
- 数据结构 (2)
- 计算机图形学 (11)
- 模式识别 (1)
- 前端开发 (14)
- 机器学习 (11)
- ios开发 (50)
- Python (9)
- HTML5 (4)
- 计算机视觉 (9)
- 数字图像处理 (7)
- 架构设计 (19)
- 数据库设计 (9)
- 算法设计 (59)
- Java (37)
- 其他 (3)
- 游戏开发 (5)
- c++ (17)
- Linux (3)
- TCP/IP (2)
- Flex (41)
- 健康 (6)
- AI (2)
- 工具 (1)
- 数据挖掘 (1)
- 性能优化 (6)
- 综合 (2)
- 网络通信 (12)
- Android (2)
- UML (3)
- 软件设计 (11)
- 编程经验 (7)
- J2EE (1)
- 多媒体技术 (3)
- 数学 (7)
- php (4)
- 设计 (1)
- CS (2)
- 计算机理论 (1)
- 信息安全 (1)
最新评论
-
ahead_zhan:
good good good
flex3控件_ModuleLoader -
lonerzf:
好样的。非常感谢楼主
OpenCV视频教程整理 -
lonerzf:
好样的。谢谢~
OpenCV视频教程整理 -
coding1688:
博主说的不错,我在实现瀑布流布局时也用的masonry插件,有 ...
Javascript 瀑布流式布局及其动态效果的实现 -
snowolf:
除非玩游戏,不然没啥win的事情,或者用win的银行客户端,通 ...
macbook安装操作系统的机理分析
参考:http://www.webgamei.com/club/thread-4117-1-1.html
随着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 Playercache中的签名的框架RSLs可由所有配置好的Flex应用共享。换句话说,如果某人的应用已经下载了500k的签名的框架RSL,并且该RSL仍旧在Flash Player cache中,那么你的应用就可以使用缓存下来的RSL。其次,即使某人清空了其浏览器缓存,对Flash Playercache也没有任何影响。
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 monolithicFlex SWFs that still startup quickly.”)时谈及的。Eismann提出一项技术以利用FlashPlayer中的多个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来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;
总结:关键还是要做好清除工作,自己设置的引用自己要记得删除,自己用过的系统类要记得做好回收处理工作。 以上问题解决的好的话不需要自定义强制回收器也有可能被系统正常的自动回收掉。
发表评论
-
phonegap js 和 本地代码 调用原理
2013-09-03 11:52 718转自:http://www.cnblogs.com/coms ... -
nginx上搭建HLS流媒体服务器
2013-07-28 13:31 1347转自:http://blog.csdn.net/ ... -
ActionScript最新3D引擎项目(转载)
2012-10-23 19:11 8303D引擎 注:对于3D引擎,渲染的效率和支持的渲染功 ... -
Flash 3D的相关文章推荐
2012-10-12 15:18 0Flash ActionScript 3.0的3D效果处 ... -
深入浅出了解Molehill的底层API-顶点着色器与片段着色器
2012-10-12 11:07 1190转自:http://www.adob ... -
ActionScript 3 和 Flex框架的性能优化
2012-08-29 09:33 730与其在程序写完了之后臃肿得跑不动,不如平时注意这些关键点,时时 ... -
JS原型对象通俗"唱法"
2012-08-23 16:52 686参考:http://www.cnblogs.com/gn ... -
Javascript 瀑布流式布局及其动态效果的实现
2012-08-18 21:24 2284参考:http://test.yvlou.c ... -
常用前端开发工具合集
2012-08-18 10:07 742参考:http://www.cnblogs ... -
玩转html5<canvas>画图
2012-08-06 09:09 1337参考:http://www.cnblogs.c ... -
Flash、HTML和Unity开发网页游戏的现实比较
2012-06-15 10:49 24172011-11-21 这一天对于全球的flash开发者来说是 ... -
学好JavaScript Web开发必备技能
2012-06-09 18:57 752参考: http://hi.baidu. ... -
javascript编程技巧_模块化编程(匿名函数)
2012-06-07 09:56 2547参考:http://blog.csdn.net/lxp ... -
JavaScrip防止代码被阅读
2012-06-02 23:16 851参考:http://www.mscto.com/JavaScr ... -
BlazeDS的架构和工作原理简介
2012-06-02 14:09 852参考:http://hi.baidu.com/whlxj ... -
前端性能优化
2011-06-04 11:22 651图片篇: http://www.pin5i.com/showt ... -
浅谈AMF协议的优与劣
2011-06-03 16:33 1114参考:http://www.router.net.cn/Art ... -
FLASH/ActionScript 性能优化
2011-05-31 21:41 1159一. 图形方面的优化 1. 减少同时在屏幕上物体的个 ... -
FLEX4 中SKINCLASS使用PATH绘制多边形
2011-05-28 18:08 782skinClass中绘制多边形使用Path标签,把绘制 ... -
ActionScript 3 和 Flex框架的性能优化
2011-05-27 16:28 6881 创建新数组时避免使用它的构造函数。 这样做:var a ...
相关推荐
随着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的朋友可以看看。