但是我很困惑。因为据说“Flash全站”开始运行后,就不再请求或者很少请求URL了,换页是通过换祯完成的。我开始无法理解,从网上下载了几个成品的源文件。
可是非常抱歉,所有的源文件都是巨型的,极其复杂的。action分布到各个frame和剪辑实例里,而实例都是托放的,你无法知道到底有多少个实例,主时间线有几十层.......。这样的东西既不是动画也不是代码。结果就是无法调试,无法升级和修改。
不知道大家是怎么做的。
推荐的是,像Flex或Laszlo那样做,或者干脆选择它们的一个,虽然我还不知道什么是Flex还有Laszlo。
不选择它们的理由是:
1,我没有空间,几乎没有虚拟空间对它们提供支持。
2,我没有学Java,而是php或者.net什么的,而那两个技术还不很支持其他技术。
即使是这样,也应该使用XML来描述你的程序,把代码和资源尽可能彻底的分开。如果你熟悉Asp.net,就是< ..../>的形式。用这种语法定义任何诸如label的组件(我认为这是最困难的组件了)。
然后,为程序写一个XML解释器,按照你写的some-page.xml文件,create,loadMovie,attach,duplicate一通,把它显示出来。换页就是请求新的xml文件,再解释。
对拉!这听起来比在时间线上“盖高楼”更困难和复杂。但是我觉得至少这样做有三个好处:
1,我喜欢程序胜过画画,我完成这样一个站点等于实现了一个framework,会超有成就感。(光说不练啊,这孩子)
2,这个站点变得可扩展(flexible,MM的产品寓意于此吧?),尽管仅仅对于它的开发者来说(要是有一套标准及不一样了,MM就不学学sun呢?)。
3,对用户来说,因为组件个数有限,即使大量重复也是flyweight的(享元模式),能很大的提高访问速度。
上述第3个优势意义不仅仅如此。
Html只是表达,Asp,Jsp,php这些东西最终也是生成Html。用户只有一点点通过form参与互动的机会,所以叫传统的browser是瘦client。而Actionscript尽管效率低下,却有了较强的client端计算能力。*可能强大到C/S的client一样的程度。那么就厉害了。
可是,要是把和Server交互的代码都堆在frame里......所以如果你的程序最重要不是动画,而是要和用户交互的所谓RIA,必须选择组件化。
这里要提一下“偷偷下载”的问题了。现在的用户,比如我,才不会老老实实的看你的东西,这个页面出来了,看不上两秒就要点点什么按钮啦。那就是换到别的页了,你正在“偷偷下载”的东西自然是被抛弃了。不幸的,没有下载完的swf好象不会存到本地缓存。那么一个100多k甚至几百多k的页面就没有缓存的价值。
相反的,我要“偷偷下载”一些供显示的组件,它们通常不应该超过30k。尽管数量可能较大(其实不会,你有耐心做50个花色的button?),但是等用到时,它们大都在缓存里,会非常快速。
组件化的代价是,用户的CPU要大转了,也更消耗内存,因为加载组件是在运行时。但是我觉得,比起网络带宽,CPU算什么资源?这正符合调剂高速CPU和低速IO的逻辑嘛。
以上内容和Flash课件,Flash动画里的action没有任何关系啊。