BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

ExtJS十年浮沉录

| 作者 Jay Garcia 关注 0 他的粉丝 ,译者 薛命灯 关注 24 他的粉丝 发布于 2017年12月25日. 估计阅读时间: 17 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

拥有十多年历史的ExtJS仍然是一个很好的企业级应用开发平台。从2006年到2015年,我一直活跃在Sencha社区,在论坛上回答别人的提问、发表文章、出书、录制教程、在全球各地开展培训。

这篇文章将带你一览ExtJS的历史,顺便表达一下我那沉寂了将近五年的观点。

时代的终结——IDERA收购Sencha(2017年8月25日)

Sencha官方博客上发布了一篇博文,宣布Sencha把自己卖给了IDERA

一开始我感觉很兴奋,后来从兴奋变成疑惑,而且我相信不止我一个人有这种感觉。

一些Sencha的社区拥护者在Sencha的博客和论坛上表达他们的各种疑虑,毕竟在过去几年,这门技术的流行度一直在下降,而且在行业内也很难找到这方面的专家级人才。

对于我来说,这个持续了11年的时代要终结了,不过我觉得ExtJS仍然值得我们一提,因为世界各地的拥护者们仍然在使用它。

回到2005年

2005年是Web开发技术的发展元年。大部分人都应该记得单页应用(SPA)的诞生,当然这要得益于众多JavaScript库的支持。

  • Firefox是IE 6唯一的有力竞争者。
  • 常见的调试工具(Chrome Dev Tools、firebug等)还没有问世,开发人员主要使用alert()进行调试。
  • Prototype JS和Scriptaculous是JavaScript框架中的佼佼者。
  • 基于DOM的动画技术也刚崭露头角,不过太耗CPU。
  • 尽管AJAX已经出现了一段时间,但良好的设计模式还在形成当中。
  • Dreamweaver、Textmate和VI是开发网站和应用程序的主要工具。
  • 智能手机还没有问世。

2005年,谷歌发布了测试版本的谷歌地图。这在当时是一个跨时代的壮举。我们终于有机会看到不需要刷新整个页面就可以更新状态的地图,我们也看到了异步操作是如何给网站用户带来良好体验的。

进入雅虎UI时代

2006年2月13日,雅虎基于BSD许可发布了第一版YUI(Yahoo! User Interface Library)。

Web开发者第一次在一个免费的框架中看到了Prototype+Scriptaculous组合所能带来的功能,当然,YUI提供了更多的特性:

  • CSS重置
  • 丰富的UI组件——AutoComplete、Container、TreeView、TabView、DataTable,等等。
  • 布局管理器——这在JavaScript框架领域还是头一次出现。

很多开发者在网站上使用YUI,我也使用了YUI的组件库。不过,我感觉很多功能做得并不是很好,在SPA中使用它们并不是很直观——起码第一个版本是这样的。

YUI-ext

2006年8月,Jack Slocum(Alta5的CEO)在他的博客上分享他对YUI做的一些实验性改进。时间一长,这些改进变得越来越复杂,于是Jack把它们打包,变成了后来的YUI-ext,也就是ExtJS(Extensible JavaScript)的前身。

YUI-ext Grid组件的推出从此改变了这个项目和整个社区的轨迹,GridPanel成为大多数应用的核心组件。

在项目的早期阶段,Jack不断地往框架里添加各种组件,如动画组件、模式窗口、选项面板、可调整大小元素和布局管理器。这些组件有自己的渲染方式,并非只是对YUI的扩展。

YUI-ext的文档中心在当时看来也是一个开创性的设计,它是基于框架本身构建的,所以在使用文档时你就可以看到这个框架的价值所在。

现如今,我们可以看到所有的文档,但在当时,JavaScript框架能够提供完整文档的并不多。所有的YUI-ext开发者都很珍惜它的文档,因为他们不仅可以查阅它,还能看到活生生的组件示例。

YUI-ext为Web开发者奠定了一个前所未有的基石,很多开发者开始涌向这个框架,于是一个新的社区形成了,YUI-ext迎来了爆发式的增长。

从YUI-ext到ExtJS

2007年1月,我们发现Jack忙于推出YUI-ext 0.40,也就是在这一版本里,框架的命名空间从YAHOO.ext变成了Ext。

2007年2月,ExtJS 1.0出现在ExtJS.com网站上。2007年4月,ExtJS.com正式向社区发布ExtJS 1.0。

2007年,社区见证了这个框架的商业化过程,他们成立了ExtJS公司,发布了商业许可。这一举动也得到社区的大力支持,因为我们都看到了这个框架的价值。

短短的几个月,Jack Slocum发展了大量的社区贡献者。不过,因为框架商业化许可问题,社区出现了分裂,这个问题至今仍在困扰着整个社区。

ExtJS 1.0

ExtJS 1.0被社区广泛使用,这是YUI-ext变身之后的一个重大版本,我们在这一版本中看到了很多新的部件和主题样式。

ExtJS使用了YUI内核,不过1.0版本允许开发者通过适配器使用jQuery、Prototype或YUI,因此吸引了大量原先使用jQuery、Prototype和Scriptaculous的开发者。

ExtJS 2.0——XType的变革

这一版本继续带来革命性的变化,它引入了“XType”,开发者可以基于JSON配置文件生成UI,并带来了更多的UI组件和布局选项、一个更新过的面向对象工具套件、增强的组件生命周期和一个全新的文档系统。

XType彻底改变了ExtJS应用程序的开发方式。一方面,可以在服务器端生成UI配置,以此来控制应用程序的渲染方式,另一方面,开发者也可以单独使用JSON来生成整个应用程序。

ExtJS 2.0是我最喜欢的版本之一,不仅速度快,定制化也很简单。

ExtJS 2.0.2——许可灾难的开端

在ExtJS开发早期,Jack与社区讨论过许可变更的问题,并公开了他的商业化设想。Jack的帖子得到了65个回应,于是他接着发了第二个帖子继续讨论这个话题。

YUI-ext是基于BSD许可发布的,而ExtJS 1.0则是基于LGPL许可。到了ExtJS 2.0.2,许可变成了GPL,网络上因此掀起了轩然大波,也就是在这个时候,社区开始出现了分裂。

下面这段话很好地概括了这一许可变更给社区带来的负面影响。

Ext团队创造了一个不可思议的框架和一个活跃的社区,这才是让人感到伤心的地方。它拥有一个开源框架所应该具有的一切特点。而现在,Ext正犯下一个错误:他们破坏了社区对他们的信任。或许,这一决定可以带来眼前的利益,又或者是长期的业务。但我看不到社区会再像以前那么繁荣。从长远来看,Ext或许会有一个成功的商业产品,但他们会丧失广大社区的支持。

很多人带着遗憾离开了社区。因为社区的负面情绪太过强烈,以致于Jack Slocum开始受到人身攻击,他不得不公开在博客上声讨。

ExtJS 3.0

这一版本引入了Ext.Direct,一个服务器端平台,用于快速地构建RPC调用。这一版本是2.0版本之后的一个重大版本,ExtJS的开发者也在持续增长。

Sencha公司成立

2010年6月,Sencha宣布成立,办公室坐落在Palo Alto。Sequoia资本为Sencha融资,这家新成立的公司看来前途无量。因为资本的流入,Sencha开始雇佣大量工程师,大肆开发新产品。Sencha推出了Sencha Touch,世界上第一个H5移动开发框架,当然也有其他一些产品,不过它们在市场上并没有太大反响。

Sencha Touch一开始只支持WebKit(Android和iOS平台),后来在ExtJS 6.0中才与桌面版框架统一起来。

值得注意的是,Sencha通过收购jQTouch、Raphael JS等公司来扩展它的工程团队,也雇佣了重要的社区贡献者和追随者。这些举动也给社区带来了重要影响。

ExtJS 4.0

4.0版本野心勃勃,可以说这一版本是从1.0到2.0重写之后的一个最重大的变化。我为此写了我的第二本书《Ext JS in Action》。

  • 引入了全新的类系统。开发者只需要一个简单的方法调用就可以定义好他们的类并注册好XType。除此之外,它还引入了Java和Ruby风格的语法,包括Static和Mixin。
  • 引入了MVC模式,数年之后此举体现出了它的重大价值。
  • 在之前的版本,开发人员只能通过覆盖、扩展类将额外的功能注入到组件中,而这一版本引入了基于组件的插件。
  • 基于YUI的Flash图表彻底被纯H5的方案取代。
  • GridPanel和TreePanel经过彻底的重写,与之前的版本看起来更像是表亲,而不只是远房亲戚。开发者可以在两种UI模式中重用大量的代码,并基于新的插件架构使用编辑和BufferedView等特性。
  • 受到Adobe Flex的启发,引入了两个新的布局——VBox和HBox,很快在社区中引起了关注。他们重写了布局引擎,提供代码可重用性和更好的跨布局支持。
  • 引入了Sencha Cmd,一个命令行工具,可用于快速启动、升级和构建应用程序。

ExtJS 4.0让我们看到了这个框架第三波重大变革。

ExtJS 4.0的性能问题震惊了整个社区

2011年4月26日发布的4.0版本招来社区大量的负面评价。推出的新功能以牺牲性能为代价,而这些性能问题直到几个月之后才得以解决,这也是导致社区进一步分裂的根源。

新的架构看起来不错,但他们太着急了。

GridPanel是使用最为广泛的一个组件,为了提升性能,他们对它进行了重构。其他组件,如TabPanel也同样存在性能问题。有些社区成员甚至形容ExtJS 4.0“慢得像狗屎”。

Sencha立即启动了一场bug修复活动,以此来平息社区民愤。直到4.1版本性能问题才得以解决,而在4.2版本里带来了更快的缓冲式GridPanel组件。

在我看来,这一版本就像是ExtJS的“Windows Vista”。尽管4.0版本的新架构相比之前跨出了一大步,但核心组件的性能和稳定性问题却促使一些开发者抛弃了这个框架。

4.0版本也是第一个使用SASS进行主题快速变更的版本。伴随着4.0版本的发布,社区本身也发生了一些变化。我们看到Sencha的核心成员一波又一波地离去,这些举动也给社区带来负面影响。

后来谷歌发布了AngularJS,很多开发者头也不回地弃ExtJS而去。

ExtJS 5.0

相比4.0版本,这一版本在架构方面的改动较小,不过也引入了一些新的核心特性,这些特性在一开始被证明是很有用的,但也让ExtJS应用变得更复杂。

这些新特性包括Model View ViewModel(MVVM)。大多数开发者习惯了4.0版本的MVC模式,并认为它足以胜任大型可伸缩应用的开发。但其实Sencha并不是很想引入MVVM,但既然它被认为是一个最佳实践,很多开发者也开始接受这种方式。根据应用的实际规模情况,项目源代码里可能会增加数百个额外的视图模型文件。

5.0版本开始支持平板,社区也十分关心这一特性,因为之前的版本在这方面做得不是太好。

自由开发者和社区的弃用潮

随着5.0版本的发布,Sencha改变了定价模型,而这一“创举”给社区造成了不可挽回的伤害。

在一开始,Sencha提供的是单副本许可。他们在2014年将许可改为5个副本为单位,从而造成社区开发者大量弃用。社区开发者开始在Twitter、博客和Sencha论坛上表达他们的遗憾:

看来不止我一个人对如此高的定价感到震惊。我不敢相信我刚刚在新项目中推荐使用Ext/Touch,我想是我错了,我要改变主意,寻找其他替代方案。

作为响应,一个坐不住的框架开发者在他的博客上写道:

社区开发者的骚动让Sencha的决策者意识到自己的错误。如果他们能够改变主意是最好了,但从短期来看,这样会帮他们赚到更多钱。不过从长期来看,越来越少的开发者会使用这个框架,所以未来的业务一定会受影响。开发者生态系统是需要长期去维护的,为了获取眼前的利益而不顾长远发展是不可取的。 我想说的是,如果你们在寻找替代Sencha Touch的方案,可以看看Ionic Framework或Kendo UI。不要因为组件数量问题影响了你的决定,质量才是关键。不管使用何种方案,你都可以开发出好的应用。

相比2006年,2014年的开发者已经有数千种JavaScript框架可选择,很多Sencha社区开发者集中精力帮助社区一起开发Angular JS、Kendo UI、Ionic等框架。

ExtJS 6.0

ExtJS和Sencha Touch的合并在这一版本中有了很好的表现。这次大统一得到了很多开发者和企业的肯定,因为原先Touch和ExtJS之间的差别正是他们的痛点所在。

ReactJS的流行和Sencha社区的没落

ReactJS在2012年开始进入社区,并逐渐在JavaScript社区中流行起来。2014年前后,ReactJS发展迅速。2015年,React Native诞生,加速了React生态系统的发展。

正在寻找Sencha替代方案的开发者发现ReactJS才是他们的最爱。

与早期的ExtJS社区一样,ReactJS社区提供了很多自由开发的组件,从而让开发者从ExtJS到ReactJS的过度变得简单了很多。ReactJS社区十分活跃,生机勃勃。

Sencha和社区的未来不确定性

Sencha错误的定价策略和发布的若干不济事的版本伤害了整个社区和行业,而且已经到了不可挽回的地步。

我几乎置身ExtJS社区十年,在公司里使用Sencha开发了很多关键的应用。而在过去三年里,这些公司决定出资从Sencha平台迁移出来,因为他们不再相信Sencha了。IDERA收购Sencha只会将这种恐慌放大,进一步让摇摇欲坠的社区不堪一击。

总结

我在2015年离开了Sencha社区,但我仍然保持着对早期ExtJS社区的美好回忆。我很庆幸离开了ExtJS,重新把精力投入到新的技术上。Facebook、微软和Twitter这些大公司在支撑这些新技术,给全球的JavaScript开发者带来了福祉。Sencha应该能够从中得到启发,在还有机会的情况下做出一些举措来重振他们的技术和社区。

查看英文原文The rise and fall of Ext JS

感谢徐川对本文的审校。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT