是否选择了合适的框架进行Web开发对项目是有重大影响的。我们都希望找到一个稳健的易维护的框架结构。接下来,我们一起来对当前三款流行Web开发框架作个简单比较认识。
初步认识
AngularJS诞生于2009年,是商业产品GetAngular的一部分。后来,GetAngular创造者之一的MisKoHevry对其进行精简,并随后获得了Google的大力支持,进而发展成今天的样子。Angular最独特最有创造性的特性莫过于是双向(two-way)数据绑定以及HTML扩展能力。
问世于2010年的Backone.js是一个轻量级的MVC框架,崇尚精简的团队对其青睐有加。Pinterest,Flixster,AirBNB等都是使用该框架进行开发的。
Ember的首个足迹印于2007年。刚开始时是作为SproutCore的MVC框架,之后被Sproutlt和Apple接手。Ember的重量级用户包括Yahoo,Groupon以及ZenDesk。
此外,是否具备一个完善的社区支援网络也是重要的考量因素。透过对Github,StackOverflow,YouTube等社区进行数据收集后可知,AngularJS在各大主流社区中都是最受欢迎的,Backbone.js与Ember.js则不相伯仲。
框架大小
页面的加载速度是网站受欢迎与否的重要因素。用户现在变得越来越缺乏耐心了,特别是在同类型网站之间进行选择时,哪个加载得更快或许就会先入为主了。因此,我们必须充分考虑这个需求,尽可能地为我们的页面进行瘦身提速。这里有两个考量因素:框架的大小和引导加载过程的快慢。
下表列出了这三个框架各自的净大小以及结合依赖物之后的大小(已压缩):
模板
Angular和Ember已包含各自的模板引擎,Backbone则需要用户自行选择。以下将结合HTML代码实例进行对比分析。
1.AngularJS
Angular的模板引擎是使用表达式绑定的HTML格式,绑定格式是使用两对大括号:
2.Backbone.js
Backbone可与很多其它第三方模板引擎进行整合,默认的选择是Underscore。如果你已经采用了Underscore,属于Backbone依赖之一的Undersocre无须额外的操作,我们便可使用它的模板引擎。美中不足的是该引擎功能较简单,我们通常需要加入其它的javascript代码来实现其它功能,例如下面的例子:
3.Ember.js
Ember目前采用的模板引擎是属于Mustache模板引擎扩展的Handlebars。目前出现的一个新Handlebars变种名为HTMLBars。相对于Handlebars,HTMLBars增添了对DOM的支援,不过HTMLBars暂还没有正式推出。以下例子是基于Handlebars的:
AngularJS的强项
双向数据绑定节省了大量公式化的代码,先看看下面的jQuery代码:
而如果使用Angular,我们可以省却这些代码,而只需在HTML模板进行绑定声明:
Angular不仅拥有最大的在线社区支持,而且Google一直在推广它。很多创新的工具不断涌现,极大地提高了工作效率,例如:Protractor,Batarang,Zone.js等。此外,Angular还与社区进行广泛合作,不断进行改进。有关Angular 2.0的设计文档,可以点击这里进行了解,任何人都可以直接在上面发表意见。
Angular能够帮助我们有条不紊地把程序生成区块进行分类:控制器,指令,装配器,筛选器,服务和视图(模板)等。这些都是以模块化方式进行组织的,互相形成依赖。不同区块有不同的角色,视图负责UI,控制器负责UI身后的逻辑管理,指令负责组件复用以及HTML扩展等。
自动化的脏数据检查(Dirty Checking)机制能够使我们进行任意的对象属性修改,angular会自动识别出这些变更,然后通知所有与该属性有关的观察者。
Angular还提供了很多即用的功能强大的基本内建服务,例如$http和$timeout。
AngularJS的弱项
嵌入包含和原型继承的概念会让不少开发者感到迷惑,我们需要花一定时间才能领悟其中的含义。在视图层便可广泛使用的Angular表达式,不可谓不强大,甚至是过于强大了。开发者可以在视图模板中使用复杂的逻辑甚至是进行操作委派和计算,这不啻增加了测试的难度。例如下面的代码:
<button ng-click="(oldPassword && checkComplexity(newPassword) && oldPassword != newPassword) ? (changePassword(oldPassword, newPassword) && (oldPassword=(newPassword=''))) : (errorMessage='Please input a new password matching the following requirements: ' + passwordRequirements)">Click me</button>
Backbone.js的强项
Backbone是一款轻量级的产品,容易上手,新概念不多,并且有丰富的文档资源与代码示例资源。基于Backbone的第三方框架有Aura,BackboneUI,Chaplin,Geppetto,Marionette等。
Backbone.js的弱项
Backbone暂时还没提供程序架构方面的支援,取而代之的是提供了一些基本的工具来让我们自己进行架构建设,例如内存管理等都是需要亲力亲为的。视图生命周期管理方面的欠缺,更使得程序容易在路径/状态发生变更时出现内存泄漏问题,除非我们能把所有应该清除干净的对象处理好。
很多没能从Backbone中获得的功能都是由第三插件来提供的。这样一来,我们有可能需要花时间进行一番测试摸索才能确定哪个插件才是适合自己的,从而增加了额外的开发用时。
Backbone没有提供双向数据绑定,我们必须自己手写代码来进行相关处理。Backbone中的视图是直接操作DOM的,这增加了单元测试的难度,对程序稳健性和复用性也有一定影响。
Ember.js的强项
Ember拥有不俗的配置管理能力,可以省却不少的人工代码。例如Ember.js会通过路由器的名字,判断出相应的路由和控制器的名字。Ember中有一个卓越的路由层、数据层,名字是ember data。它封装了一个完备的数据模块,与Ruby-On-Rails或其它RESTful JSON API很好地整合在一起。
性能指标是Ember.js的设计重点,例如事件处理循环和程序预编译等方面,Ember都做了不少努力。
Ember.js的弱项
Ember API 经历了一段时间才最终形成现在比较稳定的版本。因此,初初接触Ember的开发者可能会对一些老旧的文档和例子感动迷惑,具体可以看看它的更新日志,请点击这里。
Handlebars的使用,使得DOM中充满了<script>标记,有时很难分辨出哪些代码是自己的,对CSS样式和其它框架的整合也造成了一定影响。
写在最后
Angular在HTML扩展方面有很多独到的做法,有强大的支援资源。Backbone是小巧的,入门门槛相对较低的。基于MVC结构的Ember,对有面向对象编程基础的开发者来说非常亲切,自身也有强大的配置管理能力。三者各有特色各有长短,我们不妨好好对比学习,找到适合自己的那杯茶。
英文出自:Airpair.com
From CSDN.
相关推荐
Ember.js是一个强大的JavaScript框架,专门用于构建单页应用程序(SPA)和复杂的Web应用。它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可维护性。在这个“前端项目-ember.js.zip”压缩包中,你...
If you are a JavaScript developer who is starting out to build ambitious Ember.js application, or a developer who has prior Ember.js experience and want to transition your application to the latest ...
Ember.js 是一个JavaScript...Ember.js是一个开源的JavaScript客户端框架,用于开发Web应用程序并使用MVC(模型 - 视图 - 控制器)架构模式。在Ember.js中,路由用作模型,句柄模板作为视图,控制器处理模型中的数据。
Ember.js是一个强大的JavaScript框架,主要用于构建复杂的单页应用程序(SPA)。这个名为"ember-charts"的前端项目是基于Ember.js的一个图表库,旨在提供简单、高效且功能丰富的图表解决方案。下面,我们将深入探讨 ...
在Web开发领域,MVC(Model-View-Controller)框架是一种被广泛应用的设计模式,尤其在Web前端开发中,它极大地提升了开发效率和代码的可维护性。MVC框架的核心理念是将应用的业务逻辑、数据处理和用户界面这三部分...
学习和掌握Ember.js 需要理解MVC架构,熟悉JavaScript基础,以及一定的前端开发经验。通过阅读《Ember.js 用户手册.docx》,开发者可以深入理解框架的各个部分,并学会如何高效地利用Ember.js 构建现代Web应用。
与JavaScript框架/库相关的书籍的集合,包括(但不限于):React.js,Angular / AngularJS,Node.js,Vue.js,Backbone.js,Ember.js,Knockout.js,Dojo.js, D3.js,Three.js,Leaflet.js,Google Maps API,Bing ...
- **技术领域**:本书聚焦于 Ember.js,一种流行的 JavaScript 框架,用于构建可扩展的单页应用(SPA)。 ### 第一部分:Ember CLI 基础 #### Introduction - **简介**:本章介绍 Ember CLI 的基本概念及其在 ...
Ember.js是一个强大的JavaScript框架,主要用于构建复杂的单页应用程序(SPA)。它提供了许多内置功能,如数据管理、路由、模板渲染等,使开发者能够高效地构建动态和交互式的Web应用。"ember-resource.js"看起来是...
Ember.js是一个开源的JavaScript框架,用于构建可维护性和可扩展性高的Web应用程序。这个压缩包"Ember.js v3.28.9.zip"包含了该框架的特定版本——v3.28.9的源代码。这个版本的发布可能包含了一些bug修复、性能优化...
Ember.js是一个强大的JavaScript框架,用于构建Web应用程序。版本5.6.0是该框架的一个迭代更新,旨在提供更高效、稳定和可维护的开发体验。这个压缩包包含的资源对于学习Ember.js的开发流程,理解其核心概念以及进行...
总之,ember-data.js是Ember.js框架中不可或缺的一部分,它为前端开发提供了一套强大且灵活的数据管理解决方案。通过理解和掌握ember-data.js,开发者能够更高效地构建响应式、数据驱动的Web应用。
Ember.js是一个流行的...总的来说,Ember.js v3.26.2 是一个强大的前端开发工具,适合用来构建大型、复杂的应用程序。无论你是学生、教师还是专业开发者,这个版本都能提供你需要的资源和工具来创建高质量的Web产品。
Ember.js是一个用于创建 web 应用的 JavaScript MVC 框架,采用基于字符串的Handlebars 模板,支持双向绑定、观察者模式、计算属性(依赖其他属性动态变化)、自动更新模板、路由控制、状态机等。 Ember是一个...
Ember.js 是一款强大的前端框架,专为构建复杂的Web应用程序而设计。它的核心理念是提供一套全面、结构化的解决方案,帮助开发者高效地处理常见的Web开发任务。本实例将引导你了解 Ember.js 的基本概念和使用方法。 ...