企业开发:选Flex?还是HTML5?

338 查看

英文原文:Yakov Fain,中文编译:Flash开发者大会

本文是一段记录谈话,是我跟 Anatole Tartakovsky和 Victor Rasputnis的谈话内容,他们是我的商业伙伴,来自Farata系统,这次谈话发生在我们滑雪后的雪山上。

Yakov.有多种方法可以为它们的企业创建 Web 应用程序,这和给邻居里的披萨店开发 Web 站点并不相同。在过去五年中我们一直主要使用 Adobe Flex 作为前端 Web 应用程序的开发。Flex 应用程序运行在可预测的运行时环境Flash Player中。可编译actionscript代码,并且拥有成套方便的开发工具。

这些天,flex的地位正在”新的战略”中发生转变。即使 Flex 仍然是用于开发 Web 应用程序的最佳框架,你仍然可以感觉 HTML5 的压力。但是,只使用 HTML5 是不足够开发 Web 应用程序的 —  你仍然需要DHTML —  HTML、 JavaScript、 CSS 和XMLHttpRequest对象。

企业开发:选Flex?还是HTML5?

Anatole. 过去我们使用它们进行开发,现在似乎我们再次进入同一水域,难道经过七八年后,它还是同一条河流?DHTML在ie5中就有了,几年后更名为 AJAX。

Y. 回到1999年,微软创建XMLHttpRequest对象,让他们的邮件客户端Outlook Web版本在浏览器窗口中不需要刷新整个页面就能更新。这么做对吗?

A. 部分对吧。 IE5中也有XSL转换工具生成HTML和支持自定义插件开发。IE5的市场占有率在90%左右(指的是1999年),在企业,这是唯一核准的浏览器。

Victor. 与此同时,IE5 支持 HTML 组件称为 HTC 的模型。它允许您创建包含自定义组件的属性和方法的htc文件,所有这些属性在Web浏览器的DOM中是可见的 。

A. 事实上,比起那些提供HTML5支持的框架,这是一个更加进步的模型。因为您可以使用一种标记语言结合 JavaScript 来支持您的组件。这种模式是类似于 Flex所提供的。今天,我们看一些插件环境 ,允许使用各种框架。这种情况并没有任何好转。

积极的一面,已更改的 Web 浏览器和 JavaScript 的性能大大改善。浏览器支持 12/6/8 每个域的连接 (相对于 2 五年前),这给 AJAX应用程序带来性能提升。

Y.但让我们实际点来说说,我作为一个企业的 IT 经理拥有有限的预算和 5 人团队来开发 Web 应用程序。如果我使用可预测的基于良好开发环境的 Flex 或 Java 等(IDE,编译器、 调试器、 分析工具) 我的工作会比较容易。但使用 JavaScript,情况就不同了。首先,使用 JavaScript 开发周期长 (光阅读代码的操作成本就高)。

第二,我不光需要找到熟练的 AJAX 开发者,而且他们需要掌握一堆现代 JavaScript 框架。

第三,编译器不捕获程序员错误,所以我需要分配更多的时间进行测试。维克托,你怎么看这个?

V.如果你问我有什么大变化 — — 就是感觉。在这世纪之初,我们工作在 DHTML 环境中。只有少量的开发者参与这种”令人怀疑”的开发。企业架构师也难采用这一 pre-AJAX 模式,并且经常问同样的问题,”这不是 J2EE,对吗?”,我们会回答,”对,它不是”。然后,很显然,就被划归到业余产品。

在过去六年,用 Flex 开发慢慢成为核准的企业技术 – 它可编译,可控制的环境,具有良好的性能、 测试工具和国际化支持。然而,adobe竟然对flex不管不顾了。

Y.他们处理的方式可以列入教科书作为极坏的公关例子,而不是什么值得骄傲的在2011年10月举行的Adobe MAX 大会上宣布将flex捐献给Apache基金会,博得大家起立鼓掌。事后才一个月,他们又发布消息宣布,adobe将不再支持flashplayer (Flex 运行库) 浏览器插件。这听起来像是,他们想要杀死flex。但是,我们都知道flex还活着!

V. 是的它是活着。从技术上讲,它仍然是开发 Web 应用程序最理想的环境,但政治上成为过去的产品。

Y.现在很多企业创建者会说,”5年前我们告诉过你与JavaScript呆在一起的…”,但我想听听你们的观点,关于使用 Flex 与 JavaScript 开发的成本,那一样更贵?

V.这取决于管理这个项目的人的类型。如果一个企业的经理人是一个临时的角色。他工作6-12个月后,可能被转移到另一个位置,或者离开公司。他对最终结果是不感兴趣的,他可以在特定的时间内,留在预定的范围内,但该项目从长远来看可能会失败。

JavaScript 开发者每小时工资,低于那些知道Flex的开发者。而使用Flex开发更容易,结果似乎很好与基于 JavaScript 的应用程序进行比较。用 Flex 开发费用可能最初更多,但产生更好的结果,而这对于企业经理人来说并不重要。

Y. 是的企业经理人的主要目标是往上爬和获得良好的奖金和退休金,而不是创建先进的应用程序。

V. 他们不总是要往上爬。有时他们跳槽到另一家公司,在相同的位置会带来更多的钱或其他职业机会。这就是为什么对于这些企业经理人来说,特定项目的成功可能优先级较低。

Y.所以哪个更昂贵 — — Flex 还是 JavaScript 项目?

V. 如你所知,在 Farata 系统,我们用Flex开发所有的内部项目。但是,如果客户打算为JavaScript 打开他们的钱包,我们也很乐意帮助他们。

A.如果你想用Flex 和 HTML5开发两个完全相同的项目,HTML5 项目将更加昂贵的可能性很大。但我怀疑,有人甚至尝试用HTML5项目来达到Flex级别的质量。首先,任何 HTML5 企业项目会有较低的要求。从基本的参数,如可靠性,能够适应不同屏幕大小和简化密度。实现这些功能,将在包括七个浏览器中测试通过才行,测试和开发人员将花费大部分时间在调试中。

你会节省编译的时间,但会花更多时间运行时测试。最后HTML5项目可交付的结果可能不到Flex开发项目的一半。但是,您将获得一点 Web 适应性强、 容易执行全文搜索和聚合的优势。与其他技术的集成也将变得更容易。使用 HTML/JavaScript。你得决定对于您的应用程序来说这些优势是否都是重要的。如果是,就选择 HTML5。

但通常HTML 部分这是只是整个项目的冰山一角。基本功能通常在 Java 或 .Net开发,后台办公应用程序无论如何都要使用 Flex 作 UI开发 。

Y. 踏着HTML5标志的所有这些人会很高兴地开始新的JavaScript项目,因为它适用于任何地方,它是免费的,许多开源的框架,不属于这些财大气粗的公司,如Adobe。在过去,恨透了微软,在2012年年初,又恨透了Adobe。你可以做任何事情,删减任何角落,去掉功能,但不要使用Flex启动一个新项目。这样,我们就属于主流 – 我们将使用JavaScript开发。

A.是的,但是 JavaScript 将限制任何重大和复杂的企业项目。您可以开发一些相当独立的窗口,但在 HTML 中创建一个好调试的应用程序 (不是站点) 并非易事。

现在让我们返回到浏览器的性能大幅度提高的前提。由于 JavaScript 框架开始支持不同的浏览器,在性能和总体用户体验方面,减小了 Flex 和 JavaScript 应用程序之间的差距。我建议建立前端和后端的办公应用程序之间的明确的边界。你不用担心外部用户的生产力。但如果是企业内部用户(内勤),他们每个人是工薪阶层,他们需要更好的生产力。

我们花了六年多时间在在DHTML上。我们写我们自己的框架和为财富100强企业实施DHTML企业应用。我们知道,在这些环境中的所有漏洞,和那些仍然未打补丁的的。截至今天,你无法比拟Flex和DHTML。但也有一些狭窄的领域,在那里你必须为Flex应用程序补充DHTML。

大多数企业应用程序的前端,后端,和内部办公(支持错误修复等)。前端层可以包含DHTML和Flex部分,因为今天开发前端和后台办公应用程序是在相同的环境。

Y.让我们谈谈在市场上的 JavaScript 框架的情况。五年前有约 200 种框架。在 2012 年的形势是有一点点不同 — — 我们说的数十个 JavaScript 框架。但尽管如此,没有一种框架能涵盖所有 Web 应用程序的需要。维克托,你怎么看?

V. Adobe 动摇了 Flex 世界之后,我很震惊了一会儿。然后我意识到任何好的工具或环境总有一天会被新事物替代。花一些时间研究现在市场的 JavaScript 框架之后我注意到,框架有两个主要类别:

a) 那些允许你以现有的 Web 站点为基础,并由一根魔杖,将新属性添加到所有或某些标记上,他们会开始闪烁,闪耀,或做一些其他有趣的东西。这种框架不提倡基于组件的开发。他们可能不包含导航组件、 网格、 树,正如阿纳托尔所说,它们是非常典型的企业开发任务中的用于 UI 的框架。

b)类似于 Flex 提供高级别的组件,它们可能基于标记,并且在 Flex 中编码,每当你需要知道 Flash Player 内幕时,你甚至能够深入挖掘此类组件。但总体而言,此类组件是为了解决不同的问题 — 显示和 CSS 在这里不太重要。这些组件主要处理某些事件,提供模型-视图-控制器的支持等等。

通过进一步分析,我学会了Ext JS 框架,它跟Flex相似,但没有提供编译,数据绑定,而且更少的控制。

我经常举一个例子,假如一只猫,从我的手提电脑的键盘上跑过,而此时我正好在文本编辑器中打开着一个JavaScript 文件。面即使我没有注意到这一点,我还是可以成功签入此文件到代码库,但过后可能无法正常工作。由此可见未编译环境是危险的地方。

Y.你这个示例,是否也可以用到那些有狗的开发者身上?

V. 可以,但错误的数量将增加。

Y.目前,开发者军团正转向JQuery 框架。但我们纵向讨论。如前所述,JQuery 有利于提高现有 JavaScript 站点。Ext JS 使你开始设计应用程序的用户界面更接近面向对象的原则。Ext JS 具有丰富的用户界面组件,集加载程序,提供事件模型 — 这是一个不同和更好的方法,阿纳托尔,你认为是吗?

A.现在我主导项目使用这两种框架。JQuery 是一种小型的框架 (明智的代码),它可用于开发大约 80%的 Web 站点。您应该使用它的外观和用户交互体验的功能。但是,您不能将它用于构建您的应用程序组件模型。Ext JS 的组件模型适用于约 20%的 Web 站点,其中包括应用程序模块,而不是只是一组 Web 页。通常它是重要的视图导航或向导,用来执行重要业务流程,或者工作流包含客户端的部分。

Y.Data grid,哦,好…

A.是的,高级别组件和工作流因为用户通常需要执行几个步骤来完成业务流程。而这些应用程序的 20%将需要花费项目 80%的开发时间。所以,你不需要在这两个框架之间作出选择。我的 AJAX 项目的主要问题不是选择什么框架去开发,而是找到合适的软件开发者。

V.绝对,极端的专注和注意力是必须的。

Y.或者你可以使用更多的框架,帮助测试。

V.一切必须彻底反复测试。在 JavaScript 中重构是一场噩梦。

A.软件开发人员必须记住— 所有未完成的代码。我们的许多在已编译的语言中很有把握的代码,在 JavaScript 中都是不支持的。

值得一提的另一类用Java开发的框架, 用于生成进一步的JavaScript,这是一个有争议的想法,因为写代码之后,您需要调试它。这时你将认识JavaScript,这是你的一门外语。

Y.我猜,你的意思是 GWT。为什么这是一个胎死腹中的主意,有一很大原因。 JavaScript 和 Java 编程的的思想和心理都不相同。五年前,我已经写了articledemonstrating 讲了Cobol、 Java、Lisp程序员如何以不同的方式解决同一任务。我想,是时候将 JavaScript 版本添加到此示例中了。

A. 在写 Java/GWT 的人已经知道如何读懂和解释在调试器中的 JavaScript 代码。另外,GWT 隐藏了很大一部分JavaScript 功能。

Y. 加上 Java 不支持动态 programming…

A. 并非太多人使用动态编程,但是这将很好的改变语言。二十年前,有混合的语言,允许使用点符号,要求一些代码片段,来执行一些动态和静态编程。我们有一个选择,要么操作员编译,要么在运行时解释。作为开发者,我的心态难以平复,直到JavaScript支持这项功能。

V. 阿纳托利,通过多年,人们才接受一种解释型语言(JavaScript中,ActionScript中,等)在浏览器内运行的概念?

A.这个问题在许多年前就提出了 – 记得curl语言吗?这些语言在R&D …

V.但他们从来没有成为Web浏览器使用的标准。

A.完全正确!苹果禁止让Flash Player进入其流行的设备中,这成为Flex发展的一个巨大的障碍。如果一些厂商决定在他们的设备中不允许任何其他语言或环境,杀死这些新的想法,同样的事情也可能发生。例如,Google推出了一种新的语言称为Dart,但微软表示,“不,我们将改进JavaScript。”

Y.JavaScript框架承诺向你隐藏所有不兼容,并做到定制功能,如果供应商不要他们的某些功能。

A.我不认为任何人可以将世界文学翻译成tribe Tumba-Yumba这种表现力非常有限的语言。这就是为什么不同语言适合不同的任务或大小不同的应用程序。JavaScript只是一种非常基本的语言。

V. 但如果你使用Ext JS,他们的文档建议使用ext.create方法替代new操作。从技术上讲,他们是扩展或替换JavaScript本身的结构。任何框架架构师,他要创建一个受控的环境,就会闯进JavaScript的困境里去。

A.部分是正确的。如果你想创建一个真正的动态或静态的带有错误检查和运行时编译的语言,你会设置它们的数据为强类型,从而可以抛出异常。

C + +支持操作符重载,人们使用了一段时间这个功能。但它并没有持续多久 – 他们意识到,阅读和理解自己的代码变得十分困难。如果一种语言允许你写一段很难理解的代码 – 那最好是删除此代码。

V.我想添加一个对JavaScript和ActionScript进行比较的话题……我感到不舒服的是别人会读,支持,重构我的JavaScript代码。其实,我在几个月后都会很难受的重构自己的JavaScript代码。在非编译的环境中,它很棘手。我不记得函数特定的参数是什么类型。

在编译环境中,我一直都知道每一种对象的类型,是否一个对象仍然有某个属性,或者被移除。但是在解释环境中没有这些。

A. 你可以研究代码,打开每一个基类,检查参考,并找出它的属性是什么 – 语言将帮助你。在我26岁时,我喜欢动态语言,开发经理也聘请年轻,很热情,但经验不足的开发人员。

V.今天的劳动力市场,由这样的人组成 — — 价格便宜、 热情,和缺乏经验。

A. 关于Ajax的项目,这样的开发人员将花费前两个月的时间学习,第三个月,他将开始工作,并在6个月内退出,退出的原因很简单 – 开发已经很困难,项目到达了穷途末路。当此类项目的代码库达到临界点,发展过程将被卡住。

V. 开发者退出也不一定是因为该项目卡住了。开发者在就业市场会获得更有价值的信息。

A. 换句话说,该项目将停止在5-6个月内 – 它变得无力的,因为它的项目规模。这就是为什么我想强调的AJAX项目和编译环境中正在开发的项目,如ActionScript项目,有很大的区别。

Y. 我想回到JavaScript框架和浏览器的兼容性问题。我喜欢电视机的比喻。即使我的最新,最伟大的3D液晶高清电视机,你有一个30年前的黑白电视,我们都可以观看同一部电影,即使画面的质量会有所不同。在如今,可以说“用户体验会有所不同。”

现在让我们来谈谈浏览器。你可能使用最新的谷歌浏览器,但我是企业用户,使用IE 6。JavaScript应用程序,如何确保在这两种浏览器上做到相同效果?

V. 框架的核心部分,尝试解决浏览器的兼容性。他们尽可能在其限制范围内确保每个网页在每个浏览器中尽可能好的工作。

A.我不同意。在我看来你不需要通过框架的层级来解决浏览器的兼容性,只需要把你的应用程序在不同的浏览器中测试和调整就可以了。

V. 是的,我已经开始对框架作一些修改,对于任何支持框架的厂商而言,保持兼容性是一个巨大的挑战。我记得我们在本世纪初创建的XMLSP框架。我们有一个大不列颠的客户说,“这个产品是比你的公司大”。如果我没有记错,我们有五人在XMLSP上工作。

我敢肯定,Sencha有更多的开发者为Ext JS工作,这是一个前所未有的大框架。大部分的代码库和任务,正在努力实现Adobe Flex的功能。这也难怪,任何这样的框架都始终需要修复和改进。

我没有怀恨,当我在别人的框架内进行修复时。我知道这些家伙只是没有时间搞定一切。您需要构建一个 JavaScript 框架类似于一个好的乐高玩具集,很需要你的创造力,别生气的态度。花一些时间在框架上来治愈框架,然后在您的应用程序代码上工作,至少这是我当前看到的状态。

A. 重新措辞一下要么使用的简单框架组件,但不解决兼容性问题,要么准备卷起袖子,了解框架底下是什么,重新为你的项目配置人员,不仅是应用程序开发人员,还包括系统工程师,还有那些要花一半时间自定义框架的人。

V. 这么看来框架也成为你的产品了。我不同意在自定义框架上花一半的时间。这一切都依赖于长期计划。您押注在一个特定的框架,并计划使用多年,而不是投入改进,但这个框架只是为解决一个项目需要,只适用于一些补丁和变动。在大多数项目修补一个框架就足够了。

Y. 总之,JavaScript开发人员将需要面临跟Java,JavaFX,Silverlight或Flex开发者相同的任务:

– 通信的可靠性。如果数据没有到达服务器或从服务器发出?是否有可能恢复丢失的数据?从哪里获得丢失的数据?我们可以重新发送丢失的数据?并重复做什么?

– 您的应用程序的模块化。如果用户没有点击在主屏幕上的某些菜单项目,就不加载到应该处理此菜单的代码。

– 如何快速将应用程序的主窗口加载到用户的计算机?框架的核心代码是否沉重?

– 在哪里存储应用程序的状态 – 在服务器还是客户端上呢?

– 框架是否提供了丰富的组件库?

– 框架是否支持创建松耦合的应用程序组件?是否有精心设计的事件模型?

– 你选择的框架内有没有覆盖大部分应用程序需要,或者你需要使用几个框架?

– 是否有写很好的参考文档可用?

– 是否有一个活跃的社区,可以帮助你解决技术问题?

我能继续在这个清单中添加项目。因此,如果HTML5这个字眼很容易让你感到兴奋,那么冷静下来吧。它不只是添加一个视频标记到网页中。这是一项艰苦的JavaScript工作。可以预见,我们公司将迎来很多有趣和富有挑战性的项目,辛勤工作,我们不要抱怨。