写了很多时间的Flex程序,感觉Flex/AS在内存和性能方面的设计有一定的局限。我把对这两方面的一些经验记录在此,希望能抛砖引玉。
及时移除无效的事件监听器(event listeners),以避免造成内存泄漏。
及时卸载Loaders
当你使用Loader加载对象时,当该对象无用之后,及时调用unloadAndStop()卸载该对象,然后使用垃圾回收器(gc)回收Loader。AS3中的GC可能需要重复调用两次才能生效。特别针对静态图像文件使用这个技术可以有效地避免内存膨胀。
在你自建的类中,设立dispose()方法 –> 参见 DOJO toolkit 的 widget 组建的模板方法。
调用集合对象的disableAutoUpdate()/enableAutoUpdate() 方法,以避免在批量修改集合中对象时,造成大量无用的冗余事件。
在自建组件时,通过重载createChildren()方法来延迟子对象创建,而不要把所有的子对象的创建全部放在自建组件的构造方法中。
对象的创建是一个高资源消耗操作,因此尽量使用 ObjectPool 来复用对象。
在 invalidate/destroy/re-validate 你的组件之前,做一个lazy checking,以避免无谓的运算开销
善用常数,常数的访问速度快。常数都设成静态属性。
将工具方法以及其他各种无状态的方法写成静态方法。静态方法附属于类,因此无需对象初始化就可以使用,减少内存占用。
对于应用程序级别的事件,可以采用GlobalObject 或者 静态EventDispatcher 来做事件中转。这样设计的代价是增加了程序和这个程序级对象之间的紧偶尔,但是好处是大大降低了事件处理所需要的计算机资源。
使用green-threads来减缓大运算量逻辑对播放头的帧计算的压力。
参考阅读
10 Tips for Flex Application Performance
http://www.insideria.com/2009/09/10-tips-for-flex-application-p.html
Good Memory Management When Using PureMVC
http://jessewarden.com/2009/11/good-memory-management-when-using-puremvc.html
Unloading Flex Modules
Resource Management in AS3 Session Notes Available
AS3 Resource Management: Part 1
Garbage Collector Interactive Simulator
Garbage Collection and Memory Leaks
Memory Performance in the Land of References
Flash Player Memory [...]
¶
Posted 26 September 2009
§
FLASH
‡
°
The Longest Way 1.0 - one year walk/beard grow time lapse from Christoph Rehage on Vimeo.
刚做了个小工具,自动把Rails 的locals YAML文件翻译成各种语言。
>> 点击使用 Click here to use
之前用了一段时间MacOS,感觉还成。虽然键盘布局让人感觉胳地慌,虽然在笔记本上按鼠标右键必须得用两个手,虽然。。。但开发效率的确被Windows下高许多。何况Mac长地那么酷。
可能因为太酷了,所以没过半年Mba就被偷了。于是觉得不折腾,回到Windows。之后一直看到Lifehacker中报道Ubuntu的消息,心中痒痒。最近有暇,在Windows下用Wubi装了一个Ubuntu,一用便爱不释手!第二天便将boot.ini中的默认启动改为Ubuntu。
几番折腾之后,我的Ubuntu变的让人见了心情就愉悦。在这里厚这脸皮拿出来晒晒。
其中
我用了HP Mini的Theme替换了Ubuntu自带那个屎黄屎黄的。
Ubuntu 自带的中文输入法绝让人打字打到麻木。全部撤掉,换成我之前在Mac下用的fcitx。
还有一样不能少的好东西是 GNome DO,一个非常简单好用的快速启动程序。
http://www.google.cn/linuxrepositories/index.html
Google 的 Linux 软件库极大得方便用户下载和更新 Google 开发的 Linux 平台软件,省去 Linux 初级用户望而却步的软件编译过程。Google Linux 软件库支持的 Linux 发行版包括Ubuntu, Debian, Red Hat, Fedora, openSUSE, SUSE, Mandriva等常见的 Linux 发行版……
¶
Posted 20 September 2008
§
Linux
‡
°
刚从 Rails 中文博客看到已经有 Rails 2.1 的中文书了!
Libin Pan 已经完成了这本书的中文翻译。中文书的PDF文件地址是:
http://blog.libinpan.com/download/libin-rubyonrails21-cn.pdf
¶
Posted 28 July 2008
§
Rails
‡
°
Let’s say you have a blog application, which is built on Ruby on Rails. In the application, each registered user will have his personal blog page at the URL: yourblogapp.com/blogs/blogid
Perhaps, the user has his own website, say, someone.com. It will be nicer to let the user have a custom domain in your blog application (in [...]
¶
Posted 28 February 2008
§
Rails
‡
°