Flash网站架构-一个swf还是多个?

4
我将要开始使用AS3全程制作一个flash网站(按照客户的要求),在应用程序架构方面,我想了解最佳实践。这个网站规模不是很大——主页、持续的导航栏、大约8个子部分,每个子部分都有自己的内容,但是子部分之间的设计相似。过去,我会使用多个swf文件(例如,一个用于导航栏,另外一个用于每个子部分),并动态加载它们;现在,我考虑采取不同的方式,使用更多的类和只有一个swf文件(加上一个预加载器来加载它)。

是否有最佳实践来确定是更好地动态加载较小的swf文件还是构建单个大型swf文件?在AS2中,我认为加载许多较小的swf文件更有意义,但是随着AS3更强大的面向对象能力,我想知道是否仍然如此。

我知道反对单个swf设计的一个论点是在初始加载时加载所有内容的额外负担,但我认为这里没有足够重的内容,因此这并不是真正的问题。

你有什么想法吗?

7个回答

1

这取决于你所说的“更小”是什么意思。

不要将它分成太小的块,否则连接开销会让你崩溃。也不要将整个站点打包成一个庞大的东西,需要几周才能下载完。

一个好的经验法则:如果你发现自己在试图想出引人入胜或有趣的内容来展示,而用户正在等待下载,那就重新构建。

-- MarkusQ


1

我认为这主要取决于页面的内容以及您已经包含在swf中的资产数量。

通常我们只制作两个swf:一个是预加载器,另一个是真正的应用程序。

应用程序不包含任何文本或图像。除了字体之外,所有内容(动态内容)都从服务器动态加载。如果再添加10个类,swf的大小不会增加太多。

很难直接回答您的问题,因为它取决于内容的重量(以及它是动态还是非常静态的)。


1
根据我的经验,现在对于(大多数)小到中等规模的Flash网站/应用程序来说,常见做法是采用两个SWF架构,一个外壳加载一个核心。有时您可以只使用一个跟踪自己加载进度的SWF。话虽如此,您仍然希望按需加载内容和资产;图像、视频、动画和大型文本内容。这些通常不应嵌入在核心SWF中,而应在用户请求时加载。在这种情况下,无论是一个SWF还是两个SWF,主要优势都在于代码维护。当您更新应用程序时,只需要重新编译核心SWF即可。在这种模型中,您仍然可以加载包含基于时间轴的动画的其他SWF,只要将应用程序代码保留在核心中即可。
希望这能帮到您!

1

没有一种“万能”的方法来做任何事情。一个项目可能很小,可以用过程式编码的方式完成,而另一个项目可能非常复杂,有许多人参与,并且肯定能够接受变化,那么面向对象编程和设计模式可能是更好的选择。对于一个肯定会被分成几个部分的生产网站,将每个部分抽象成自己的FLA/SWF/DOCUMENT CLASS可以使您的代码易于维护。如果关于部分需要更改,我们只需打开AboutDocumentClass.as文件进行更改。现在应该使用SWFAddress来提供深度链接,为Flash网站启用收藏夹、后退和前进按钮。通过正确实现SWFAddress和一个漂亮的预加载程序,可以实现一个非常流畅、低占用的网站,易于管理和扩展。

话虽如此,我认为任何生产级别的Flash开发人员都应该了解GAIA框架。只需几分钟,您就可以拥有整个FLA、文档类、swf等的骨架。GAIA不仅以智能层次结构排列输出的文件,还设置了SWFObject和SWFAddress,以及预加载程序。

首先,您需要编辑一个XML文件,该文件位于GAIA输出新项目文件的bin文件夹中。编辑完XML和其他内容后,告诉GAIA进行脚手架搭建。对于XML中涉及到的每个部分,都会创建一个FLA文件,其中包含一个文档类,可以钩取基于时间轴的转换或TweenLite/Max实现(具体取决于在搭建之前的选择)。整个过程大约需要五分钟,然后您就可以得到网站的框架,包括预加载、SWFAddress深度链接以及转换的钩子。

结果是使用标准名称和约定的整洁文件输出,这应该很容易阅读,并且可以将冗余度减少十倍。


Brian,我知道你的回答已经有一段时间了,但我必须评论并表示感谢。我正在一个项目中使用Gaia,它真的很棒!非常感谢你的推荐。 - justinbach

0
一个反对单个 SWF 设计的论点是在初始加载时加载所有内容增加了负担。如果可以,您应该将那些经常变化的部分与不变的部分分开。有一些被称为订购创建creationPolicy的东西来处理加载时间。但除此之外,真正关键的是你自己能够轻松维护的东西。

0

目前我所知道的是没有最佳实践可以确定何时动态加载较小的 SWF 文件更好,但我可以想到一个很好的理由在开始时就加载所有内容。

我通常的做法
  • 我会将所有代码写在同一个地方

  • 动态加载包含图形的 SWF 文件


0

你的加载时间可能是一个重要因素,但需要考虑的另一个因素是,即使底层代码保持不变,你的 SWF 的“外观和感觉”是否容易改变。对于一些我参与开发的可换肤游戏,其中游戏玩法完全相同,但我们希望能够改变图像以匹配赞助客户端,我们将标题分成了两个 SWFs,一个包含所有可执行代码(Application.swf),另一个包含所有艺术资源(Library.swf)。这个方法效果很好,我们的美术团队可以对 Library.swf 进行修改,只要他们保持相同的 movieclip 导出名称方案(以及适用的帧标签),他们就可以构建新的艺术品,并简单地交换他们的“皮肤” SWF,而无需重新编译或了解源代码的任何内容。

我认为我们使用LoadMovieClip()来处理库中的资源,当然所有库剪辑都需要在第1帧上标记为导出,并带有适当的标签。此外,我们所有的代码都在单独的AS文件中,由于我们使用的是AS2.0,因此将电影剪辑作为类成员包含,而不是将逻辑放在电影剪辑本身中。这几乎完全将艺术与代码分离,除了Application.SWF中的一些基本电影剪辑用于初始化和处理OnEnterFrame()函数,然后将任何输入或基于tick的功能传递给子对象链。
我已经有大约一年没有接触这方面的工作了,所以我的术语可能有点不准确。不过,我希望这对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接