将应用程序从AS2迁移到AS3有哪些优缺点?

问题描述 投票:3回答:9

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

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

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

我想这个问题的后半部分是在与客户打交道时如何正确回答这些问题?如果不花费很多时间查看成千上万行代码,我不确定我是否可以非常准确。

谢谢!

flex flash actionscript-3 actionscript-2
9个回答
3
投票

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

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

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

所以,IMO,除了这里列出的所有优点和缺点,你需要让你的客户明白,如果你要定期更新应用程序,这迟早要做。而且我认为你不应该急于这样做。


2
投票

维基百科有一个很好的Flash Player版本的新功能列表:

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

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

  • 支持Flex 2+(第4版将于明年初推出)
  • 支持Adobe AIR
  • 二进制插座
  • H264 / AAC支持
  • 三维变换
  • 新文本布局引擎
  • 硬件加速

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

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


2
投票

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

此外,如果这个应用程序将持续很长时间,重要的是要了解知道和理解AS2的开发人员的数量将随着时间的推移而减少。如果在应用程序中跳转到AS3,那么很快(而且可能更便宜)可以更快地(而且可能更便宜)尽快完成。


1
投票

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

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

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


1
投票

AS3优于AS2--上面有很多原因,包括VM性能,更严格的编译器,用于执行更清晰的编码实践(严格打字等)。我没有看到有人提到你可以在运行时在AS3中更改对象的父对象,这是你在AS2中无法做到的事情,如果遇到这个问题,你就会知道路障是多么令人失望。

但是,更重要的是,当您在AS3中编写代码时,他们的工作就像他们所支持的那样。没有这个古怪的AS2,你会在相当规律的基础上发现bug,缺点和奇怪的代码限制结果!

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

拥有100,000行代码库(任何actionscript标准都非常庞大),移植将成为一场噩梦,除非代码记录,优雅和有条理。你可能会发现,从为头部重新编写开始为应用程序构建一个更高效和有组织的框架/设计模式最终会大大削减代码库的大小...也许它只需要一个50,000行代码库,如果它是做对了吗?

祝好运!


0
投票

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

  • 创建可重用代码更容易
  • 您可以遵循生产测试的最佳实践
  • 访问可靠的微架构框架(Robotlegs,Swiz,PureMVC,Mate,Parsley等)
  • 提高速度
  • 不要只使用Flash或Just Flex,访问两个组件库
  • 利用新的播放器功能
  • 访问as3带来的库的负载
  • 能够使用即将推出的技术,如Flash Catalyst
  • 强大的IDE,可提高效率和与大型团队合作的能力
  • 与f'n时间轴无关。

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


0
投票

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


0
投票

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中具有与AS2相同的灵活性(或至少你可以获得的最佳近似值),你会发现你的大部分代码执行速度超出了窗口......

不要使用AS3

我很认真......如果你想要定位AVM2,可以使用Flex通过MXML,尽可能少的AS3或Haxe ...如果快速开发对你很重要,请使用Flex,如果更重要的话,请使用Haxe(好吧) ,还有其他原因这样做,但我认为它们更主观)...

直到今天AS3已经走到了尽头......自从它被引入以来,该语言没有改变...确定,flashplayer有新的功能,但AS3自3年前发布以来一直保持AS3,除了Vector,只是一些非常糟糕的事情...你可能要注意从AS1到AS2需要3年时间,从AS2到AS3需要3年......现在是AS4的时候了,但Adobe似乎没有任何工作那样......相反,他们专注于越来越多地扩展他们的产品调色板......

你该怎么办?

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

除了显而易见的问题,即成本,没有重写的意思...专家是你用更好的代码库,更可维护,更灵活,甚至可能表现更好,或至少它使分析然后优化更容易...语言的表现力是一个因素,当谈到编写好的代码时,仅仅因为开发人员很懒,但除此之外,它对性能和生产力没有影响......

说到客户......

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


-3
投票

在查看升级应用程序代码库之前,我会扩展硬件(特别是如果您认为升级很困难)。扩展硬件既快又便宜。

© www.soinside.com 2019 - 2024. All rights reserved.