在 flex 应用程序中使用 mxml 优于 actionscript 有啥优势?

Posted

技术标签:

【中文标题】在 flex 应用程序中使用 mxml 优于 actionscript 有啥优势?【英文标题】:what are the advantages of using mxml over actionscript in a flex application?在 flex 应用程序中使用 mxml 优于 actionscript 有什么优势? 【发布时间】:2011-05-03 01:17:48 【问题描述】:

他们似乎都用不同的语法完成了同样的事情,使用两种不同的技术有什么意义。请强调使用 mxml 的所有可能的好处。还有一种情况比另一种更有益,以及为什么。

请澄清 mxml 与 AS3 的这种运行时行为,如 Oreilly Flex 4 Cookbook 第 1 页中所述:

" 许多刚接触 Flex 的人想知道 MXML 和 ActionScript 是如何相互关联的。 MXML 编译器 (mxmlc) 在通过不同的成语解析后,翻译 将它们放入相同的对象中,这样:

<s:Button id="btn" label="My Button" />

还有这个:

var btn:Button = new Button();
btn.label = "My Button";
btn.height = 100;

产生相同的对象。主要区别在于,在创建该对象时 ActionScript(第二个示例)只创建按钮而不是其他任何东西,创建 MXML 中的对象将按钮添加到包含 MXML 代码的任何组件。 Flex 框架处理调用 MXML 中描述的对象的构造函数 并将其添加到父级或将其设置为父级的属性。 "

【问题讨论】:

【参考方案1】:

通常,

MXML 用于构建用户界面 ActionScript 用于编写应用程序的逻辑

当然,您也可以使用 ActionScript 构建用户界面,但是:

你会花更多时间 MXML 视图比 AS 视图更易于阅读

就用户界面而言,ActionScript 应该仅用于在运行时管理视图元素(添加、删除、...)。

【讨论】:

+1 好答案。另一件事:在 ActionScript 中构建完整的 UI 会导致非常冗长(恕我直言,丑陋)的 ActionScript 代码,这可能难以维护。由于 MXML 旨在轻松指定 UI 组件及其布局,因此使用它很有意义。 我想我们都听说过 Flex 的意大利面条式代码,使用 mxml 可能会产生漂亮的代码,但并不意味着底层代码是“漂亮”的。对于小型项目,我宁愿用 AS3 构建自己的 UI!【参考方案2】:

编辑

在 Flex 应用程序中,如果两种用途都可用,那么人们应该更喜欢使用 mxml 而不是 AS。如果 mxml 没有提供解决方案,用户可以回退到 AS3。 Flex 是一个框架,因此您会期望重点放在 mxml 上,而不是 AS3。与大多数框架一样,其想法是隐藏细节以促进设计并据称使编程更易于访问。

尽管一切都是有代价的,但你不能指望 mxml 比 AS3 更快,因为它是建立在它之上的。一个合乎逻辑的结论是根据具体情况作出决定。您的应用程序要求是什么,使用此组件是否真的有性能提升等...除了 Flex 作为一个整体肯定比 AS3 慢的事实之外,我认为您无法设置一般规则。可以补充说,如果担心性能,为什么首先选择 Flex...

编辑结束

Flex 框架旨在构建 RIA,因此它带有一堆组件来实现这种效果,而 mxml 主要处理这些组件的布局,Actionscript 是构建 Flex 框架所基于的语言,通常会使用用于您的应用程序的逻辑。

问题不在于为什么要选择一个而不是另一个。如果您决定直接使用一种语言或使用基于该语言的框架进行开发,这与您将采用的方法相同。这就像比较 JQuery 和 javascript 或 CodeIgniter 和 php。我并不是说使用 JQuery 的原因与使用 Flex 的原因相同。虽然 JQuery 会尝试隐藏浏览器的特殊性并使 JS 更易于访问,但 Flex 的目的却完全不同。

如果您正在开发 RIA,Flex 是有意义的,如果您正在开发游戏,则不是。你可以用 Flex 做的所有事情都可以用 AS3 来完成,只是你不想花时间开发 DataGrids 或 HBoxes,而你可以花更多的时间在你的应用程序结构和设计上。

另一方面,如果您正在开发网站或游戏,您不希望将 Flex 框架的重量添加到您的 swf 中,因为您添加了一些图像组件和几个标签。

Flex 并不适用于所有情况,与我之前的 Javascript 或 Php 示例不同,Flex 的目的不是使其所基于的语言更易于访问或更易于处理。 Flex 有一个非常具体的目标。

【讨论】:

我同意你的帖子,但我认为它没有回答问题。问题不在于选择 Flex 框架还是简单的 AS 项目。我想他在一个 Flex 项目中问过,何时在 AS 上使用 MXML【参考方案3】:

类似的问题可能是“在 UI 中使用 html 优于 Javascript 有什么优势?”

我想你真的在问“使用声明式 UI 比命令式 UI 有什么优势?”

声明式 UI 更像是配置——没有逻辑(或者在 MXML 的情况下,逻辑很少)。声明式 UI 将视图规范与行为和数据分开。

工具几乎总是更喜欢声明式 UI,因为声明式规范往往非常适合序列化...对于更新 MXML 的工具来说比使用属性等的 ActionScript 更容易。

随着您对该概念的熟悉程度越来越高,声明式 UI 开始变得更加自然,并且大多数人都倾向于使用它们。

【讨论】:

【参考方案4】:

生产力,使用 MXML 创建视图元素比使用 AS3 更快。

【讨论】:

【参考方案5】:

从表面上看,MXML 会被转换为相同的 AS3 字节码,就像您使用纯 AS3 编写一样,因此 MXML 是否会使应用程序变慢的问题归结为 Flex 编译器的转换效果如何。

至于最初的问题,我会说 MXML 是用于视觉开发的,但正如之前所说,您在尝试创建自定义组件时遇到了限制。 我个人使用 99.9% 纯 AS3 编写 Flex 应用程序,因为我无法忍受 MXML。唯一的 MXML 文件是必需的 Entry 类,因此编译器知道它应该是它编译的 Flex 应用程序。

【讨论】:

【参考方案6】:

无论哪种方式,您的应用都会被转换为 ActionScript 对象。

使用 MXML 的优点是用户友好,并且可以更好地控制应用程序的外观。有时很容易解决将右侧窗格或面板上的组件与 MXML 对齐的问题。

我看到使用 actionScript 的优势是对您的应用程序的命令,您有更多的控制权。有时,您的 MXML 无法让您对正在查看的内容感到兴奋,而 actionScript 则为您提供了更多功能。

我建议您同时使用这两种方法来构建一个可以让您减少头痛并获得更好结果的应用程序。

【讨论】:

【参考方案7】:

没有,Flex 是用来学习的,当你学得越多,你使用的 .as 就越多,然后有一天……你使用 0 Flex。 一方面它很慢。

(编辑 - 对 cme​​ts 的回答) “为什么 flex 慢” - 它创建计算机生成的 .as 代码。 .as 中的等效功能更快更小。 'MXML 将 UI 与代码分开' - 我会说不,它没有。首先...它是 XML。

如果您是新手,请查看其他框架,例如 Away3d、FDT 和 MinimalComponents。随着您越来越先进,您使用的 MXML 越少,并且有一天不再使用 MXML,您正在编写纯 .as。 Flex 中的任何内容都可以在 HTML5/.js 中更好地完成。 .as 也比 HTML5/.j 好得多 这就像一辆学习三轮车,对做拖放的公司开发人员有好处,他们认为自己是程序员。软件工程师......在发展之前不要长期使用 Flex。 这里:http://www.youtube.com/watch?v=TL2t8eOs1XE 如果您留在 Flex 并且不前进,我会为您感到难过。

【讨论】:

实际上,如果您编写 AS 代码而不是 MXML,您的应用程序不会更快。只要您使用 Flex 框架,无论是完全使用 ActionScript 编写,还是使用 MXML/AS 混合编写,性能都是一样的 我认为您需要备份该声明...为什么 Flex 慢? 也许你的意思是从mxml生成的AS代码可能很丑? 我假设您的意思是“MXML”用于学习。如果这就是你的想法,那么我会说你做错了。 MXML 用于将 UI 与逻辑分离。如果你在 Flex 中编写了 0 个 MXML 和所有 AS3,那么你就没有做任何服务。

以上是关于在 flex 应用程序中使用 mxml 优于 actionscript 有啥优势?的主要内容,如果未能解决你的问题,请参考以下文章

从 Flex - mxml(动作脚本)迁移到另一种技术

Flex 组件和 main.mxml 通信

通过从 flex 中的另一个 mxml 文件访问组件来使组件不可见

从Flex-mxml(动作脚本)移动到另一种技术

如何从 flex (mxml/actionscript?

在用 Actionscript 和 MXML 编写的 Flex 程序中调试内存泄漏的最佳方法是啥?