将应用程序从 AS2 迁移到 AS3 的优缺点是啥?

Posted

技术标签:

【中文标题】将应用程序从 AS2 迁移到 AS3 的优缺点是啥?【英文标题】:What are the pros and cons of migrating an application from AS2 to AS3?将应用程序从 AS2 迁移到 AS3 的优缺点是什么? 【发布时间】:2010-11-28 08:02:37 【问题描述】:

我有一个客户问我“从 AS2/Flash 升级到 AS3/Flex 的优缺点是什么?”他的应用存在性能和可维护性问题。

我有点讨厌这些问题,因为我只想说“AS3/Flex 将变得更快、更易于维护”,但我知道我应该比这更具体。该应用程序接近 100,000 行代码,文档记录不佳,并且 UI 似乎都是动态生成的。

显然,从 Flash/AS2 迁移到 Flex/AS3 会很昂贵,但是提高速度和可维护性是否值得?有谁知道它将在多大程度上提高速度和可维护性?有没有什么是你在 AS3 中不能在 AS2 中做到的?我猜不会。在 AS3 中,您真的可以做一些在 AS2 中无法做到的重要事情吗?

我想这个问题的后半部分是在与客户打交道时如何正确回答这些问题?没有花很多时间浏览数万行代码,我不确定我是否能非常准确。

谢谢!

【问题讨论】:

【参考方案1】:

在考虑升级应用程序代码库之前,我会先扩展硬件(尤其是如果您认为升级会很困难)。扩展硬件将更快、更便宜。

【讨论】:

这些是客户端技术。您不能只强迫最终用户升级。 所以你会建议花更多的钱来重新开发现有的应用程序而不是扩展硬件? @Kane -- 您无法扩展客户的笔记本电脑,特别是如果它是最终用户应用程序,尤其是如果该应用程序不打算供企业使用... 就“性能问题”而言,这个问题相当模糊。客户端遇到服务器端性能问题或客户端性能问题是什么类型的问题?我假设问题出在服务器端(即,连接到关系数据源并处理该数据)。 @贾斯汀您假设性能问题与客户端相关,我想我们有不同的观点。 Kane,他从来没有提到任何服务器端技术,所以假设性能问题是服务器端的类似于假设他的性能问题与行星的对齐方式有关。【参考方案2】:

***有一个按 Flash Player 版本划分的不错的新功能列表:

http://en.wikipedia.org/wiki/Adobe_Flash_Player

从版本 9 开始的所有内容仅适用于 AS3。以下是一些亮点,包括我自己的一些补充:

支持 Flex 2+(版本 4 将于明年初推出) 支持 Adob​​e AIR 二进制套接字 H264 / AAC 支持 3-D 变换 新的文本布局引擎 硬件加速

编写了在 FP8 (Flex 1.5) 和 FP9+ (Flex 2+) 下运行的 Flex 应用程序,我可以告诉您它的速度明显更快。对于人们每天花费大量时间的业务应用程序,我认为这可能是一个显着的改进,可以减少最终用户的头发拉扯。对于字符串连接和数组排序等低级操作,有一些性能指标,但这些指标并不等同于您在实际应用程序中看到的性能提升。实际上,它们会更小,但可以测量。

最终,您能做的最好的事情就是向他们估算维持应用程序原样与重写和添加后续功能的成本。如果他们不打算在应用程序中进行太多更改,那么重写可能不值得。但是,如果应用程序添加了很多功能,并且您觉得使用 Flex 和 AS3 可以显着提高工作效率,那么您应该能够向他们展示数字并让他们根据这些数字做出决定。

【讨论】:

而硬件加速只能在配备合适显卡的机器上使用(不太记得是哪一种,但它只是所有显卡的一个子集)【参考方案3】:

升级最大和最重要的原因是,就 Adob​​e 而言,AS2 是一种死语言。 AS2 在它自己的特殊 VM(准确地说是 AVM1)中运行,它与 Flash 播放器的其余部分一起永远停留在 Flash 8 的世界中。没有任何新功能或优化会回到 AS2 - 时期.

此外,如果此应用程序能够长期存在,那么了解和了解 AS2 的开发人员数量会随着时间的推移而减少,这一点很重要。如果应用程序要跳转到 AS3,那么越早而不是越晚越容易(而且可能更便宜)。

【讨论】:

我从来没有过多考虑虚拟机的 AS 是在其上运行的。对我来说,AVM 存在于 Flash 播放器中是有道理的……对吗?因此,如果用户安装了 Flash10 并正在使用此 AS2 应用程序,该应用程序会不会在最新的 AVM 上运行,并且无法享受最新功能带来的好处? 实际上有 2 个 VM 内置到所有 Flash Player 版本 9 及更高版本中。如果您使用的是 AS3,那么无论您针对的是哪个版本的播放器,您都在使用 AVM2。如果您使用 AS2,您将被困在 AVM1 中 - 无论您针对的是什么版本的 Flash。【参考方案4】:

其他答案已经很好地涵盖了基础,但我将仅提供性能方面的贡献,编写良好的 AS3 的脚本执行在 AS3 中的执行速度往往比 AS2 快 3 到 100 倍。它根据正在做的事情而有很大差异。但是请注意,对于大多数应用程序而言,性能问题并不完全或什至主要是由于脚本执行造成的。通常渲染是最大的瓶颈,在这种情况下切换到新的 AS3 VM 可能会产生适度的好处,甚至可能根本没有。只有分析才能判断您的特定应用程序是否会看到显着的性能改进。

但这只是为了补充讨论。我同意其他评论者的观点,即最大的问题是许多新功能只能在新 VM 中使用。请记住,这不仅仅是切换语言的问题 - Flash 播放器目前有两个不同的虚拟机,而 AS2 VM 现在本质上是一个遗留应用程序。

其他人没有涉及的另一件事 - AS2 和 AS3 内容之间的互操作性非常差。如果您可能正在加载外部内容 (SWF),或者尝试使用 3rd-party 库(图形组件或类似的东西),您可能会看到大多数此类内容已经是 AS3,而 AS2 的东西只会越来越少了。

【讨论】:

我从未使用过任何特定工具——我只是制作小型一次性框架,其中类在执行大量代码操作之前和之后注册到监视器类,并将结果相加。但在我参与过的极少数项目中,脚本执行的性能与渲染相比相形见绌,这非常难以分析。确实,我最好的方法是停下来比较一下——例如,如果您怀疑某个组件运行缓慢,请尝试在删除其内容的情况下进行编译,看看整体性能是否有所提高,等等。【参考方案5】:

我个人永远无法忍受 AS2 并且在 3 之前完全避免使用该语言。其他人已经发布了很多原因,但这里是我脑海中的一个快速列表:

创建可重用代码更容易 您可以按照最好的生产测试 实践 访问实体微架构 框架(Robotlegs、Swiz、PureMVC、 伴侣、欧芹等人) 提高速度 不卡在 Flash 或 Just Flex,访问这两个组件 图书馆 利用新的播放器功能 访问加载的库 as3 带来了现场 能够使用即将推出的技术,例如 闪速催化剂 提高效率的强大 IDE 以及与更大的团队合作的能力 不绑定到 f'n 时间线。

对我来说,选择不是 Flash/AS2 和 Flex/AS3 - 你根本不会失去 Flash...。您只会获得 Flash、Flex 和纯 AS3。

【讨论】:

AS2 与时间线无关,因为它似乎在 Flash 中。您可以像在 AS3 中一样编写 AS2 代码。许多 AS2 开发人员更喜欢在他们的时间轴中只保留一个帧。 注意到了。我不同意您可以像编写 AS3 一样编写 AS2。 使用 FlashDevelop 可以正确合理地清理与 AS3 类似的 AS2。在我不得不回到 AS2 的几个项目中,我的 AS2 代码比以前更干净、更优雅,这要归功于从 AS3 中吸取的教训。 你能具体告诉我为什么“创建可重用代码更容易”吗?【参考方案6】:

性能 由于您有 100,000 行代码,因此在速度快 10 倍的 VM 上执行代码(如 adobe 所说)肯定会提高性能。但是当前应用程序的性能如何?如果它足够好,那么你真的不应该考虑这个专业。

可维护性和可重用性 如果当前的代码库难以维护且不可重用,那么它需要重构,而不是用新语言重写。 AS3 确实鼓励有助于可维护性和可重用性的编码实践,但这并不意味着您和您的团队会遵循它们。也有可能使用 AS3,您最终会得到一个难以维护的代码库。还可以以可维护和可重用的方式重构您的 AS2 代码。

新技术 我相信这是这里唯一真正的专业人士。 Flex/AS3 是一项新技术。这是一个漂亮和干净的。很多人都大力支持。 Adobe 正在推动每个人从 AS2 切换到 AS3。雇用新的 AS2 开发人员将变得越来越难。支持 AS2 的开发工具将会减少。我猜你迟早要做出改变。

因此,IMO,鉴于此处列出的所有优点和缺点,您需要让您的客户明白,如果您要定期更新应用程序,迟早必须这样做。我认为你不应该急于这样做。

【讨论】:

“我认为你不应该急于这样做”是什么意思?该应用程序的新架构将是多瑞士法郎,所以您是否建议先将架构转换为多瑞士法郎,然后再将每个瑞士法郎更新为 AS3?似乎很难让 AS3 swfs 与 AS2 swfs 对话...... 不,不要那样做,管理 AS2 和 AS3 代码会一团糟,而且集成基于 AS2 和 AS3 的 SWF 文件存在很多问题。【参考方案7】:

考虑到需要花费大量时间,我建议将 100,000 行的应用程序从 AS2 移植到 AS3 与从头开始完全重建几乎没有什么不同。您会发现,这 100,000 行中的许多行可能甚至都不需要。如果代码包含任何类型的框架等,我会更加担心,因为您可能必须自己移植这些,此时您还不如重新开始。您的客户需要考虑他们希望这个项目能够持续多久。如果不到几年,我说不要打扰。如果这个应用程序是他们的全部业务,我会说是 2.0 版的时间,而当您在 AS3 中重写功能时,请花时间改进应用程序的功能和可用性。

【讨论】:

【参考方案8】:

AS3 并不比 AS2 好

我不太明白这整个抨击 AS2 的事情……我知道只有极少数人实际上似乎了解 AS2 的巨大可能性……AS2 可以与 Ruby 相提并论,而 AS3 正是 Java 的所在是 10 年前...是的,它很慢,但它比 AS3 更强大和更具表现力...我不知道 AS3 有哪些基本功能,而 AS2 没有(不要混淆语言和 API),除了正确的错误处理...on a moreless related topic, i got in to details recently...AS3 可以访问更大的 API,但大多数重要的东西在业务应用程序中都不是您真正需要的...

AS2 可以高效且优雅,如果您真正充分利用它......会发现你的大部分代码执行加速都超出了窗口......

不要使用 AS3

我是认真的...如果您想以 AVM2 为目标,请通过 MXML 使用 Flex,尽可能少地使用 AS3,或者Haxe ...如果快速开发很重要,请使用 Flex对你和 Haxe 来说,如果它更多地是关于性能(嗯,还有其他理由这样做,但我猜它们更主观)......

直到今天,AS3 一直是一条死胡同……自推出以来,语言没有任何改变……当然,flashplayer 有新功能,但自 3 年前发布以来,AS3 一直保持着 AS3,除了Vector,这只是一些非常虚假的东西……您可能要注意,从 AS1 到 AS2 用了 3 年,从 AS2 到 AS3 用了 3 年……而且确实是 AS4 的时候了,但 Adob​​e 似乎没有从事类似的工作......相反,他们越来越专注于扩展他们的产品调色板......

你应该怎么做?

我的印象是,你有大约 100000 行意大利面条代码......所以实际的问题是代码,而不是语言......你需要重写......如果你认为它有意义,您甚至可以在 AS2 中重写它(尽管我仍然建议改用 Haxe)...实际使用 AS2 的唯一要点是,如果幸运的话,您可以复制和粘贴一些实现...但是您真的应该从头开始构建一个干净的应用程序,使用您使用的语言提供的最好的东西,作为 OOP、AOP 和 FP 的子集(Haxe/AVM1 将允许所有这些事情)或 MXML 允许的声明性方法...

除了明显的问题,即成本之外,重写没有任何弊端......专业人士是您最终获得了更好的代码库,更易于维护,更灵活,甚至可能性能更好,或者至少它使分析和以后的优化更容易...... 语言的表达能力是编写好代码的一个因素,仅仅是因为开发人员很懒惰,但除此之外,它对性能和生产力没有任何影响......

当涉及到客户时......

...我建议您告诉他们一个简单的事实:他们可以拥有一个以尽可能低的价格提供一组固定功能的软件(在您的情况下,这可能是他们现在所拥有的),或者他们可以拥有灵活/可扩展/精心设计的软件......即使他们选择后者,他们也必须接受,每隔一段时间你需要采取激烈的步骤,例如重写......代码的不断退化是一个不可否认的现象......当你设计一个软件时,你开始决定它可以朝哪个方向发展,它不能朝哪个方向发展,你会来到一个点,在其中添加了晦涩难懂的肮脏黑客网络来实现功能,这该软件没有设计,会使任何进一步的扩展变得不经济......不要犹豫地向您的客户指出,当您要扩展的软件(无论是否属于您)时,这是一个非常好的点重写,而不是让他们为添加额外功能所需的所有低效工作付费他们需要的功能......软件扩展的成本成倍增长......在重写之后,这个成本会回到“接近0的浅部分”......这取决于您自己的专业知识来确定,指出进行重写更有意义(如果需要查看 100K 行代码才能真正进行此评估,那么在我看来,这显然是重写的好时机)......了解您的想法软件应该去,需要什么,然后选择最有效的方式来做......

【讨论】:

正确的错误处理位是一件大事。 AVM1 能够对整个 API 进行猴子补丁很不错,但是会以运行时错误为代价?没办法——尤其是对于商业应用程序。从 Flash 5 开始,我已经在所有方面开发了 huge RIA - 虽然 AVM1 的表现力很好,但 AS3 中的结构、速度和错误处理意味着我再也不会在 AS2 中编写代码了。此外,AS3 还维护和扩展了 AS 最强大的特性之一——闭包。这比我书中的猴子修补要大得多。【参考方案9】:

AS3 优于 AS2 - 上面有很多原因,包括 VM 性能、更严格的编译器以执行更简洁的编码实践(严格类型等)。我没有看到有人提到您可以在 AS3 中在运行时更改对象的父对象,这是您在 AS2 中无法做到的,如果您遇到此问题,您就会知道这是多么令人失望。

但是,更重要的是,当您在 AS3 中编写代码时,它们会按预期工作。这些古怪的 AS2 东西都不是你经常发现错误、缺点和代码限制的奇怪结果!

如果您正在考虑移植/重写,如果您的开发团队熟悉 AS2 而不是 AS3,您还应该考虑可能需要等待的任何学习曲线。

拥有 100,000 行代码库(按任何 actionscript 标准来说这都是相当庞大的),除非代码被记录、优雅且有条理,否则移植将是一场噩梦。您可能会发现,从为应用程序构建更高效、更有条理的框架/设计模式开始,从头开始重写,最终会显着减少代码库的大小......也许它只需要 50,000 行代码库,如果它是做对了吗?

祝你好运!

【讨论】:

以上是关于将应用程序从 AS2 迁移到 AS3 的优缺点是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 从AS2到AS3 - 它去了哪里 - setRGB | [MCK]

从AS2到AS3“它去了哪里”setRGB |[mck]

将数据库从 oracle 11g 迁移到 MySql 5.7 的优点、缺点和问题是啥?

将 AS2 SWF 加载到 AS3 SWF 中并在 URL 中传递变量

AS2 到 AS3 转换错误

如何使用“l = new LoadVars ();”这样的代码迁移到 AS3