本文由码农网– 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划!
选择最适合项目需求的JavaScript框架,可以提高你发布有竞争力的web app的能力。
最后,你对基于JavaScript的app或网站找到了一条奇妙的思路。选择正确的框架可能对你项目的成功有着相当大的影响。它可以影响你按时完成项目并在将来维护代码的能力。JavaScript框架,如Angular.js,Ember.js或React.js,给你的代码带来结构,并保持其有序化,从而使您你的app更灵活,更具可扩展性,并更容易开发。
Javascript场景的易变性
Web开发的变化发生的很快。几乎每个月都会引入一个新的JavaScript框架,并且现有的框架经常被更新。由于这些框架是开放源代码的,因此世界各地的大型社区也都可以不断地使之丰满起来。因此,了解每个框架的优点和它们之间的区别并不是一件容易的事情。
深入Angular vs React vs Ember
许多开发人员因为JavaScript框架的种类繁多而感到眼花缭乱——框架外观和功能非常不同。
让我们来比较一下三个最流行和广泛使用的JavaScript框架的优势:AngularJS,ReactJS和EmberJS。
框架 |
AngularJS |
ReactJS |
Ember.js |
是什么? |
超级JavaScript MVW框架 |
一个不止用于构建用户界面的JavaScript库 |
一个用于创建高要求的web应用程序的框架 |
建立 |
由Mi?koHevery建立于2009年 |
创建者:Jordan Walke,2013年开源 |
最初由Yehuda Katz于2007年创建叫做SproutCore,后被Facebook收购,并于2011年更名为EmberJS |
官方主页 |
https://angularjs.org/ |
https://reactjs.net/ |
http://emberjs.com/ |
Github |
https://github.com/angular/angular.js |
https://github.com/facebook/react |
https://github.com/emberjs/ember.js |
Bug 报告 |
https://github.com/angular/angular.js/issues |
https://github.com/facebook/react/issues |
|
许可证 |
MIT |
MIT |
BSD-3-Clause |
被使用的热门网站 |
Youtube, Vevo, Freelancer, Istockphoto, Weather, Sky Store |
Facebook, Instagram, Khan Academy, New York Times, Airbnb, Flipkart, Sony Lifelog |
Apple Music, Yahoo!, LinkedIn, TinderBox, Netflix, Groupon |
最适合使用的地方 |
构建高度活跃和交互式的Web应用程序。 |
数据设置频繁更改的大型Web应用程序 |
动态SPA |
AngularJS: 框架领域的冠军
Angular.js是一个开源的Web应用程序框架,具有由Google提供的Model-View-Controller(MVC)架构(Angular 1)和Model-View-ViewModel(MVVM)架构(Angular 2)。它是上面提到的三个框架中最古老的。因此,它拥有最大的社区。 Angular.js通过使用指令扩展HTML的功能来解决开发SPA(单页应用程序)的问题。此框架强调让你的app快速完成和运行。
Angularjs的优缺点
优点:
- 创建自定义的文档对象模型(DOM)元素。
- 简单的UI设计和更改。
- 在HTML文档中创建输入字段时,将为每个已渲染字段创建单独的数据绑定。Angular倾向于在重新渲染之前检查页面上的每个单个绑定字段的任何变化。
- 依赖注入。
- 简单路由。
- 易于测试的代码。
- 此框架利于HTML语法的扩展,并通过指令创建可重用的组件。
- 强大的模板构建解决方案。在HTML属性中使用绑定表达式来驱动模板功能。Angular的模板引擎对DOM有着深入的理解,且其结构良好的模板减少了创建结果页面所需的代码总量。
- 数据建模限于小数据模型的使用,以使代码简单易于测试。
- 在渲染静态列表时速度快。
- 伟大的代码重用(Angular库)。
缺点:
- 指令API的复杂性。
- 对于具有许多交互元素的页面,Angular变得缓慢。
- 原始设计往往很慢。
- 由于许多DOM元素,性能方面有问题。
- 复杂的第三方集成。
- 陡峭的学习曲线。
- 范围很容易使用,但很难调试。
- 路由受限。
注意。Angular 2的功能与上述不同。Angular 2不是从Angular 1重新设计的,它被完全重写了。两个版本的框架之间的巨大变化在开发人员之间引起了相当大的争议。
ReactJS: 在块上的新生儿
ReactJS是一个开源的JavaScript库,用于构建高性能的用户界面,专注于由Facebook引入和提供的惊人的渲染性能。React专注于模型视图控制器(Model View Controller)架构中的“V”。在React第一次发布后,它迅速吸引了大量用户。它是为了解决与其他JavaScript框架的常见问题——大数据集的高效渲染而创建的。
Reactjs的优缺点
优点:
- 简单的界面设计和学习API。
- 比其他JavaScript框架显着的性能提升。
- 更快的更新。React使用最新的数据创建新的虚拟DOM和修补机制,并高效地将其与以前的版本进行比较,创建一个最小的更新部分列表,使其与真正的DOM同步,而不是每次更改时重渲染整个网站。
- 服务器端渲染允许创建同构/通用web app。
- 容易导入组件,尽管具有很少的依赖性。
- 良好的代码重用。
- 非常适合JavaScript调试。
- 完全有可能用React增强Angular以增强麻烦的组件的性能。
- 完全基于组件的架构。
- JSX,一种JavaScript扩展语法,允许引用HTML并使用HTML标记语法来渲染子组件。
- React本地库。
缺点:
- 不是一个完整的框架,而是一个库。
- 非常复杂的视图层。
- Flux架构不同于开发人员习惯的范例。
- 很多人不喜欢JSX。
- 陡峭的学习曲线。
- 将React集成到传统的MVC框架,如Rails中需要一些配置。
EmberJS: 所有的繁重工作
EmberJS是一个用于创建单页面客户端Web应用程序的开源JavaScript应用程序框架,使用Model-View-Controller (MVC)模式。此框架提供通用数据绑定和URL驱动方法,用于构建不同的应用程序,重点放在可扩展性。
Ember在2007年最初被发布时,叫做SproutCore。2011年,它被Facebook收购,并重命名为Ember。它结合了本地框架,例如Apple的Cocoa的经过验证的概念以及轻量级的敏感性。
Embersjs的优缺点
优点:
- 约定优于配置。Ember.js不是为应用程序中的各种路由提供详细的配置,而是喜欢遵循命名约定并自动生成结果代码,仅在不遵守约定的情况下指定配置。
- 客户端渲染和结构到可扩展的web应用程序超出视图层。
- URL支持。
- Ember的对象模型利于键值观察。
- 嵌套的UI。
- 最小化DOM。
- 适用于大型应用程序生态系统。
- 强数据层与Java集成良好。
- 完全成型的模板机制(Handlebars模板引擎构建在流行的Mustache 模板引擎上)减少了编写的代码总量。它对DOM一无所知,而是依赖于直接的文本操作,动态地构建HTML文档。
- 使用观察者来改变值,这将导致仅渲染更改的值。
- 通过使用附件避免“脏检查”。
- 更快的启动时间和固有的稳定性。
- 性能焦点。
- 友好的文档和API。
缺点:
- Ember.js缺少控制器级别的组件重用。
- 有很多过时的不再工作的内容和示例。
- 陡峭的学习曲线。
- Handlebars使用许多<script>标记来污染DOM,用作标记以使模板保持更新到模型。
- 当走出其典型用途时会很麻烦。
- Ember的对象模型实现膨胀Ember的整体大小并在调试时调用堆栈。
- 最有见地和最重的框架。
- 对于小项目而言过大。
- 测试用例似乎模糊/不完整。
比较Angularjs Vs Reactjs Vs Emberjs功能
特性 |
AngularJS |
ReactJS |
Ember.js |
动态UI绑定 |
允许在纯对象或甚至属性级别使用UI绑定。可以同时更新多个绑定,而不需要耗时的DOM更新。 |
直截了当地将状态直接链接到UI。状态参数作为对象传递,并合并到React组件的内部参考状态。 |
使用Handlebars默认模板引擎。你必须在模型上使用特定的setter方法来更新绑定到UI的值,在Handlebars渲染页面的时候。其他绑定选项包括一个可能性以让你的Model在View和甚至另一个Model之间用一种要么单向要么双向的绑定模式。 |
可重复使用的组件 |
Angular组件称为“指令”,它们比Ember组件强大得多。它们能够创建你自己语义的和可重用的HTML语法。 |
在视图和控制器级别使用mixin,因此组件不必UI相关,并且可能只包含一些实用程序或甚至复杂的程序逻辑。 |
基于Widget的方法称为Ember组件。Handlebars布局和Ember的后端基础设施允许编写你自己的特定于应用程序的HTML标签。然后,可以在任何Handlebar模板中使用自定义元素。 |
路由 |
需要模板或控制器到其路由器配置,必须手动管理。 |
React不处理路由。但是有很多模块用于路由,如react-router,flow-router。 |
更强大的路由,以牺牲可增加的复杂性为代价。 |
意见 |
灵活的意见。给出一点灵活性来实现你自己的客户端堆栈。 |
灵活的意见。给出一点灵活性来实现你自己的客户端堆栈。 |
灵活的意见。给出一点灵活性来实现你自己的客户端堆栈。 |
数据绑定 |
双向 |
单向 |
双向 |
定义你的需求并使选定的框架发挥最大的作用
确定哪个框架适合你,只需要评估应用程序的需求以及每个框架的优势即可。这需要深入了解所考虑的每个框架的优点和缺点,以及它们如何在不同用例下竞争。所有框架都有很多共同点:开源,在许可证下发布,并创建具有MVC设计模式的SPA。它们都有视图,事件,数据模块和路由。然而,不同的JavaScript框架更适合不同类型的应用程序。
如果你正在决策创建一个web app,对于长期支持和活跃的社区,Angular,React和Ember是最安全的。此外,目前Angular是这三个中最受欢迎的。你可以一站式使用。它是大型企业的首选框架。Ember是那些寻求全工具包含框架方法的人的最佳解决方案。Ember可以帮助你做出许多决策,所以你不必花时间研究和胶合库。由于Ember需要很长时间学习,所以它适合长期项目。React是上面提名的三个框架中最轻量级的。它的伟大在于一件事:渲染UI组件。许多人甚至将其与前面提到的框架进行配对。如果你需要逐渐现代化现有的代码库,那么这是一个合适的选择。
正如你看到的,没有明确的胜利者。有的框架比其他框架更适合特定的项目。当然,你也可以从几个不同的角度检查你的项目,包括成熟度,大小,依赖性,互操作性,功能等,并联系专业的前端web开发公司来构建完美的网站架构和网站设计,以便于更好地满足你的业务。