给AS程序员的一点建议

By: Kevin Cao

最近做了一个AS网站的重构,发现了很多问题。我想这也是互动广告AS开发从业人员普遍存在的问题,有些想法不吐不快。

就互动广告这个行业来说,太多所谓“经验丰富”的AS Web开发者都是从AS2时代成长起来的,所以直到今天还保留着脚本语言的习惯。把以前的思路带到AS3来做开发是极其危险的。我们来看几个典型:

1.滥用全局

AS2的_global是多好的东西啊,怎么AS3就没了呢?初级程序员还在抱怨,中级程序员二话不说噼里啪啦写出一个Global类,老子照用。高级程序员无语。

关于代码之间的依赖关系是个很长的话题,我在这里不展开说,只想提醒大家现在的AS3业界已经发展到了DI(反转注入)。如果你还是守着静态类或者单例,就难免有点跟不上潮流。这并不是说DI就是最好的,在小网站项目里也许根本用不上。但是一定要对自己代码中用到全局的地方好好做一下反思。也许级别的进阶就是从思考代码依赖的解决方法并且重构而开始的。

2.没有释放资源

在AS2时代,一个空白帧就可以把时间线上的资源释放掉;一个unload操作之后你所加载的swf资源也全部清空。这些是脚本语言的便捷,也是跨入AS3编程的陷阱。我看到的一些程序员是完全没有释放资源的概念的,在他们的程序里根本找不到destroy()或dispose()等类似方法。没有正确的释放资源在网站开发这种天生就是模块化的程序里是致命的错误。大部分网站仍然能够正常运行是因为网站本身规模太小,以及没有无聊的人来回切换页面几十上百次。但这并不表示这个问题就能忽视,客户是不会开着资源管理器核对内存占用的,但是身为开发者必须这么做,而且必须更专业的去做(Profiler)。通常在析构方法里面的代码可能比构造函数还要长。可笑的是我依然看到很多“制作精良”的网站背后内存占用的飙升曲线。当你想借助AIR进军移动开发的时候,问题将会更加明显。这一刻我仿佛明白了乔布斯数落Flash的原因,可是技术本身并没有错,需要提升的,也许是开发者的质量。
AS3垃圾回收请参考gskinner在06(!)年写的系列123

3.滥用资源

这点是我最近学习iOS编程以后反思的。在移动设备这种内存有限的平台上开发,每1k内存开销都很重要、谁持有内存的引用也很重要。以前在Flash里做开发,像滚动列表这种东西,有多少项就生成多少个实例出来,排列一下,弄个遮罩,让它滚起来就行。完全没有延迟实例化(内存优化)和对象回收(CPU优化)的概念。这样的程序写出来在移动设备上根本连运行的机会都没有就要跳出了。想要成为高级的开发者就一定要对你的程序中每一个对象的生命周期都了如指掌,并且能够自如把控,让内存和CPU(以后还有GPU)都运行在最佳状态。

把这些基础却相当重要的障碍扫清以后,我们才真正有资格来看所谓的“框架”。

大多“经验丰富”或多或少都有积累自己的代码库。但是我发现的现象是除了上面提到过的代码质量不高以外,这些开发者还对其他人的开源框架或者类库抱有不屑的态度。也许是程序员相轻的心理因素在作怪,但是绝不应当就此蒙蔽了自己的眼睛。要相信他山之石可以攻玉,特别是那些能够在业界得到流行和推广的框架一定有自己独到的地方。

我在向一些人介绍和推荐Gaia框架的时候,发现受众很多都是从自身的角度或者编程习惯出发,很快的就提出各种方面的质疑。比如说加载怎么没有报错,site.xml结构为什么那么冗长不够精简等等。也许很快在暗地里上就给这个东西贴上不好用的标签,转头还是用回自己的一套。其实以我使用Gaia两年的经验可以证明,这套框架的确非常适合做Agency网站项目的开发。我用它做过大到AMG中国官方网站改版,小到Siemens Navi这种只有两三个页面的网站。如果你深入学习过它的API(真的不难),就会发现它能够涵盖绝大部分的开发需求。而且你还可以反过来复习一遍一个成熟的框架是怎么运用设计模式、怎么解决代码依赖的,检查它是否在资源使用方面做到了最好。

最后

想成为一个合格的AS开发者还需要非常熟悉你的编码环境(推荐FDT),了解自动化工具(Ant、JSFL等),掌握版本管理知识(Git)。甚至还需要了解软件工程方面的知识。一切都是为了提高你的工作效率。最重要的是要认清技术不断变革的事实,有的时候需要完全抛下自己的即成经验,时刻保持旺盛的求知欲。

延伸阅读:
http://johnlindquist.com/2009/08/28/10-things-every-senior-flash-developer-should-know/
http://www.funky-monkey.nl/blog/2011/02/14/16-things-that-should-have-been-added-to-john-lindquist-list/

作者: Kevin Cao
原文地址: http://kevincao.com/2011/03/advice-to-as-developer/



10 Comments

  • S.D says:

    写得很好,支持一下。不过悲哀的是,中国一个flash site,假如5个人做,1个是总监,1个是account,1个是策划文案,1个是设计,1个是AS程序员。四个人对AS3是完全不懂,以及基本不care的。多数account连AS3和AS2都分不清楚。
    AS对于一个project里面的分量,在中国的所谓Digital Agency,基本只是一个“串”程序的角色,扫尾的。而且都是最后出现,在比稿卖钱,或设计初期的时候,基本是忽略AS在之后执行的架构和各页面动画的关联交互性。更别提以及笔者上述的深度代码规划了。

    P.S,AMG那个中国官网,和国外的一模一样,难道只是汉化?
    国外版本的那个2,3年前,就上过了gaia framework官网的featured project.

    [ 回复此评论 ]

    xdd Reply:

    @S.D, 你真是太了解DM里互动程序干的活了,大业内啊.一个“串”字概括了程序的精髓
    Gaia是好东西,基本上解决了整站浏览体验的问题,很多细节设计与程序可以在framework上做花活儿.

    [ 回复此评论 ]

    S.D Reply:

    @xdd, 哈,这是个目前国内的现状,真的是无奈.客户更不懂这些了.Gaia我用2年多了,确实好东西.比progression好用.

    [ 回复此评论 ]

    xdd Reply:

    @S.D, 这就靠各位互动程序的推广了,其实Gaia其中有一条对客户吸引力应该是满大的,SEO的内容定向能力!
    ps:关于内存管理这一块,懒的话就GC,真有毅力去写destory()或常去挂FPS()的人,是不是经常加班致死?确实应该做,但这种并不能即刻显示效果的工作内容,有多少人会去考虑,或去算他的日工作量?

    [ 回复此评论 ]

    JULI Reply:

    @xdd, 你知道GC怎么用吗?
    释放内存并不是要你去destroy某个对象, 而是让废弃的对象指空,虚拟机内含有自动垃圾清理程序。
    AS只是脚本语言,flash API强大,开发快速,适合动画设计师学习。对于专业的programmer,让flash严重消耗资源是不可原谅的。

    [ 回复此评论 ]

    JULI Reply:

    @S.D,个人认为,大环境造成的。客户的钱大多投到媒体上去了。 打个比方,只要客户投了100W的媒体,无论promotion site中放的是一张图或是一个flash, 都会有那么些稳定的访问量。 至于site的用户体验如何, 并不是客户最关心的。

    [ 回复此评论 ]

  • older says:

    据我所知,AMG中国官网的开发涉及到许多问题,一个是客户直接要求汉化,另一个是在没有source files的情况下,搭建一个一模一样的网站,ES guru team也付出了不少的努力.中间涉及到许多技术问题.

    [ 回复此评论 ]

  • Jonathan says:

    苦死程序,四个完全不懂的人还提一些完全不符合逻辑的东西!国内闭门造车,当你接触gaiaFramework的,这一切都会改变!MiniSite的春天!

    [ 回复此评论 ]

  • davidw says:

    恩恩,不要重新发明轮子的道理谁都懂,但真正做的时候很少有人能坚持。以前用as2写过些小程序,也曾积累些好的代码。可到后来as3出来就再也没用了。flash比较能伤老程序员的心,永远都号称下个版本功能更强大却永远不理会程序员从as1到as2到as3转化时候的痛苦。

    [ 回复此评论 ]

  • JULI says:

    另外我想说,不管做哪种开发,OOP的思想是最重要的。
    至于编程环境,测试工具,版本控制神马的都是浮云,任何工具够用即可,只有低能才会去刻意追求那些东西。

    [ 回复此评论 ]

Have Your Say »

Required

Required, never published

无觅相关文章插件,快速提升流量