Tag Archive: gaia


Workflow Refactoring

21号受邀到Razorfish上海公司做了一场主题为Workflow Refactoring分享会。主要内容是我之前总结的Workflow系列,并通过一个具体实例来演示整个过程。之所以用了重构这个字眼来引起程序员的注意,是因为很多情况下人们并不觉得要对自己既有的工作流程或者习惯做出改变。而重构的目的就是在保持结果一致的前提下,内部用更优雅更合理的方式来实现。

基本内容与旧版没有太大的改变。这大半年来用这套流程做了不少实践,做了一些规范上的调整。期间Flash和FDT都经历大的版本升级,相关的一些细节也要有所调整。所以重新更新了一下资料。此外在团队的实际推行中,针对设计师和程序员合作之间遇到得最多的问题也提出了更有针对性的解决方案。也明白了再优秀的流程也比不上前期规划+持续沟通的道理。

经验表示:

  • 多数Agency或Studio的团队已经开始用更专业的编辑器来开发代码,但是还没有遇到太多协作上的问题,或者说是没有对这些问题做出系统性的思考。这正是大家现有的工作流需要重构的地方。
  • 对于Flash网站,大多数情况下,用Gaia框架提供的功能就已经足够。Robotlegs带来的好处并不明显。
  • 使用JSFL和Ant进行自动化处理能够极大的提高工作效率,是这套方法的亮点,也是最受使用者欢迎的功能。

在今年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 »

Better Debugging Flash Website

Flash网站开发中常常遇到loading功能、deeplinking、js与flash交互等问题,而这些问题只有在在真实的网络环境下才能进行有效的测试。还在为上传—测试—再上传—测试的重复劳动而烦恼吗?本文告诉你一个更简单有效的debug解决方案。

1.开发Flash网站就应该用网页(而不是swf文件)来进行测试。只需要在FDT的Run Configrations里面按照下图进行设置,就能在项目编译好之后自动打开浏览器来测试(请设置为Firefox,flash插件为debug版本,后面你就知道为什么了)。 image

2.如果是用debug模式运行,FDT的控制台应该就能接收到Flash传递出来的各种信息了。这里有使用FDT来debug的详细教程,我就不复述了。但即使不用debug模式,我们也可以得到trace信息的,只要我们祭出这两件两件法宝:FirebugFlashbug。Firebug是网页开发者必备的插件,功能非常强大。而Flashbug是Firebug的扩展,专门负责输出Flash文件的trace信息。我们来看看这两个插件工作中的截图:

firebug flashbug

View full article »

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