Tag Archive: design-pattern


在今年3月份的一组文章中,我探讨了Gaia网站框架结合Robotlegs的MVC开发方式。这套机制在接下来半年的项目中运行良好,也积累了一些实战经验。但是自从用上了FDT4的Profiler功能以后,就发现了这套框架下存在的内存泄漏问题。一般的Agency/Studio网站页面较少,也不会有较长时间的停留时间和大量的加载卸载,问题还不甚明显。但是一旦项目规模上去以后,这种问题就越显严重。在今年奔驰车展网站制作触摸屏版本的时候就发生了播放器频繁出错退出的情况。排查了很久,初步确定是使用Robotlegs的viewMap.mapView()造成的问题,于是在GitHub上提交了任务单

在接下来的三个月内,我一有时间就思考这个Bug的来源。仔细研究了Gaia和Robotlegs源代码,又借鉴了Robotlegs模块扩展和另一个基于Robotlegs的网站框架HandBones的模块化思想,终于完美解决了这个问题。

首先我先排查了Gaia框架自身的内存泄漏问题。通过Profiler的调试,我发现Page实例在卸载后仍然驻留在内存中。也就是说Gaia框架本身就存在内存泄漏的问题。仔细阅读Gaia的代码后,发现问题出在对loaderContext的处理上。Gaia框架很好的处理了卸载swf可能造成内存泄漏的问题,却唯独遗漏了这个小地方:loaderContext对象会持有对被加载内容的引用。由于Gaia框架卸载loader的内容后,并没有清空loaderContext,所以被加载内容也就没法被垃圾回收。问题找到了,解决方法就很简单。在卸载的同时设置loaderContext=null就可以了。我已经向Gaia论坛提交了这个Bug,并且得到了作者Steven Sacks的肯定回复。官方的修正版本应该不久就能出来了。

View full article »

Workflow – Further Thought

授人以渔,而不是授人以鱼。如果你能坚持看完前面三篇(123)还没有晕菜,或者甚至还有些疑问想要深究一下的,那么这篇文章就是为你而写的——关于这个工作流程和开发框架的来龙去脉。

这个开发框架的建立来源于Jesse Warden这篇文章。通过它让我看到了GaiaRobotlegs相结合的可能性。一般的Agency/Studio网站用Gaia框架已经足够了。但是引入MVC模式能够让开发架构更为清晰,方便进行更复杂的大型团队开发。随后再引入AS3 Signals基本是必然的,因为这个信号机制比Flash自带的Event好得多,就算不用这套框架你也应该尝试一下。

问题主要集中在于Gaia Page的职责划分问题:Page应该是MVC中的那个角色?或者Page甚至应该是一个完整的MVC模块?

如果说按模块化开发的结构来考虑,每一个Page可以看作一个独立的模块。也就是说每一个Page都应该有一个独立的Module Context。但是很多情况下我们所做的网站开发没有那么大的复杂度。如果遵照这种划分思想,只会造成无谓的类增加,凭空增加了维护的难度。所以权衡之下,我不推荐这种做法。有兴趣的朋友可以看一下Robotlegs模块化开发的扩展

于是我们回到只有一个Main Context的情况下来考虑。在这里,Page可以是一个View(视图),也可以是一个Mediator(中介)。

View full article »

Workflow – Patterns

本文是Flash网站工作流讨论的模式篇,没看过前两篇的朋友先要去补一下课:)

Design Patterns(设计模式),对从事Flash开发的人员相对而言是比较难的知识点。从早期的ActionScript脚本一路走过来的Flash工作者很少有系统地学过成熟的OOP开发思想。包括我自己在内也一直都是半知半解,所以太专业的理论我也说不上,就尽可能的挑些容易理解的来说明一下,希望能够对进阶的开发者有所帮助。

通过RobotGaiaAnt快速构建出的网站结构已经包含了基本的网站开发模板(src目录下),在进行开发之前你需要了解以下几点:

  1. 这个结构是基于Gaia+Robotlegs+AS3 Signals(lib目录下)建立的,你需要熟悉这些API。
  2. 代码按照MVCS模式来进行组织。如果你还不是很理解这种设计模式,可以翻看我之前写的这篇这篇。对Robotlegs的机制还不是很了解的,推荐看看eidiot的这个文档,还有他翻译的中文最佳实践
  3. 然后你需要了解的是每个部分的职责分别是什么,不同的代码应该写在什么模块中。具体的指导做法就下载我这份文档学习一下吧。

pattern

Powered by KevinCao.com ©2010 | Platform: WordPress | Theme: Motion
kevincao.com