如何选择前端框架 ANGULAR VS. EMBER VS. REACT

当下最热的Web前端框架概览

作为前端工程师,我们生在最好的时代。标题中提到的三大前端框架都即将或已经发布了重大更新。Ember 在不到2个月前发布了可以平滑升级的2.0。两周前 React 发布了 0.14,在迈向1.0稳定版的路上迈出了关键的一步。在本周之内,一场名为AngularConnect的技术大会将在伦敦举行,很有可能公布 Angular 2 的时间计划。

是的,还有很多其他的前端框架。也还有很多曾经一度很火但是现在已经不那么流行了的库,比如 Backbone 和 Knockout。当然也还有更新更有趣的后起之秀,比如Aurelia。但是如果让你现在做决定选哪个框架来做web app的话,Angular, Ember 或 React 是比较安全的选择,因为他们背后都有长期有效的技术支持和活跃的开发者社区支持。那么哪一个才是最适合你的呢?让我们一起来看一看他们各自的最新版本都带来了些什么更好的新特性。

0?wx_fmt=png

1ANGULAR 2.0 (一个激动人心的新版本)


Angular 是当下最流行的前端框架不是没有道理的。它是最早发布的一个革命性的前端MVC框架。Angular 也给大家带来了很多实用的功能。

但是所有这些都被 Angular 2.0 打破了。这是一个小小的败笔。和 Ember 的更新方式不同,第二版的 Angular 几乎完全重构了。这意味着:几乎每一行代码都发生了巨大的变化。这让继续重用1.0系列的代码变得几乎不可能了。所以要想直接平滑升级到 Angular 2.0 是根本不现实的。

然后软件开发界的一大奇迹诞生了。Angular 团队发明了一种 在一个项目中同时运行 Angular 1.X 和 2.0 代码 的方法。采用这种方法你可以渐近升级。但是在我看来这种方式最关键的作用是解决了 Angular 几乎已成定局的停滞不前问题和成千上万历史遗留代码的维护问题。

既然解决了这个难题,那么时下的大多数 Angular 项目可以继续使用 1.X 版本,并可以在 2.0 正式发布之后逐步升级。如果你并不着急在今年之内发布正式版本并且愿意承担新版本的风险的话,那么直接从新版本的框架开始吧。做好API随时会变的心理准备吧,你的项目越复杂就需要越多的时间来修改你的代码以保证在新版本下正常运行。

2ANGULAR 2.0带来了什么让人期待的新特征?


很多,这个框架正在经历自诞生以来最大规模的重构。

开发2.0的主要目的是消除不必要的复杂。他们删除或者替换掉了大家熟悉的 directives, controllers, modules, scopes 等几乎所有 1.X 时代的概念。取而代之的是一个最大程度使用 ES2015 和 ES2016 新特性并采用了不同的架构设计理念的框架,以期变得易于学习,降低上手难度。

除了让框架变得简单,2.0还有几个值得注意的目标:

  • 性能优化

  • 支持原生应用开发

  • 服务器端渲染

这些新特性对 Angular 来说意味着非常大的改动,并且是1.X版本一直一来所面临的挑战。让我们进一步详细谈谈这三个新特性以及这些改动意味着什么。

1
性能优化
性能优化是所有使用 Angular 的开发者最期待的新特性之一了吧。如果你使用 Angular 做了足够久的开发,那么你一定会被性能问题所困扰。虽然终究是有办法解决这些性能问题的,但是这个框架的坑实在是太多了。

Angular 的性能是被它的状态查询机制拖慢的。每次 digest 循环,框架都会检查整个 APP 里面的成百上千个变量是否改变。它的新数据模型采用了和React一样的机制:不可变的数据结构配合单向数据绑定。基于这一关键性的改变,Angular 现在只在数据变化时更新一次。从之前的监听数据变成了只快速检查数据对象的索引而不是值。

2
原生应用支持

使用 Angular 开发原生应用是2.0路线图上的一个重大计划。Angular 开发团队曾和 React 团队碰面并讨论了如何实现这一特性。看起来他们打算借助 React Native 的底层技术实现2.0的原生应用支持。这必将引领一个新的时代,一个 hybrid app 拥有原生应用性能但跨终端共享一套逻辑代码的时代。

3
服务器端渲染

另一个长期被期待的特性是服务器端渲染的能力。服务器端渲染可以缩短首屏呈现时间并解决客户端动态渲染无法被爬虫抓取从而影响SEO的问题。页面渲染的加快将会明显地提升下一代基于 Angular 开发的 web app 的用户体验。

优点缺点
性能提升(比1.X系列快3~5倍)没有成型的文档(2.0还没正式发布,很多API都还没定型)
服务器端渲染有时候比较难找到相关的开发资源(之前的官网、博客、问答社区都没用了)
原生应用支持
框架整合(涵盖了做一个App的方方面面,包括一个增强的router)
ES2015 支持(使用了大量的新特性)
最流行的框架(很有可能在2.0中保持这种势头)
易于测试

3谁应该选择 ANGULAR?


Angular 很有可能在相当长的时间里保持前端框架里最流行的地位。所以选择 Angular 开发新项目是一个比较保险的方案。2.0 相比第一版意味着一次翻天覆地的革命。事实上,这种革命就像 Ember 之于 SproutCore一样(有趣的是,Ember 原本应该叫做 SproutCore 2.0)。

Angular 2.0 是用 TypeScript 写的,这是一种源自微软的新语言,相比原生的 JavaScript 而言增加了类型检查和一些其他的增强特性。事实上,在最近一次开发社区投票调查中,得票最多的是 TypeScript 。基于此,加上种种该框架的其他特性表明 Angular 的定位依然是大型企业应用。虽然现在就使用2.0版本还有一定的风险,但是相信2.0的正式版本很快就会发布了。

0?wx_fmt=png

4EMBER 2.0 (悄悄来到我们身边)


Ember 对自己的定位是做酷炫项目的框架。也确实有挺多酷炫的应用是用 Ember 做的,比如 Apple 的iCloud 网页版本, Discourse(由 Jeff Atwood 开源的一个新型论坛程序),还有 Ghost (新一代的开源博客程序)。Ember是由两位业界大神 Yehuda Katz 和 Tom Dale 开发维护的。虽然不像其他两个著名的框架一样有大型互联网公司在背后撑腰。但是它拥有一个活跃且牛逼的开发者社区。

在1.0的时候,Ember也因为随意改动API引起了很多不满。随后,为了维持大家对开发团队的信任,他们已经学会了如何在几乎不改变用户API的情况下做底层的的大规模更新。他们用这种方法在今年初的时候发布了一个名为 Glimmer 的高性能渲染引擎。在2.0里面他们才移除了不支持这个新引擎的部分代码和API。所以使用 Ember 2.X 开发的应用在性能上必将带来一个质的飞跃。

5EMBER 2.X 带来了什么新特征?


  • 支持 ES2015 带来的新特性,比如 modules, classes 和 decorators

  • 抛弃了 Mustache 模板引擎并 不再 支持尖括号格式的自定义组件引用

  • 使用一种名为 pods 的以功能为单位的新方式组织模块儿,取代了之前以文件用途区分的组织方式,现在一个组件就是一个 pods

  • Controllers 将被 routable components 取代

  • 利用服务器端渲染缩短首屏加载时间并增强对SEO的支持

优点缺点
性能提升(某些条件下比1.X系列快10倍)离开了典型应用场景之后就很无力
服务器端渲染相比其他两个更小众
约定大于配置
框架整合(功能全面,开箱即用,包括最优秀的路由和数据处理工具)
一流的文档
命令行辅助工具

6谁应该选择 EMBER?


Ember 为开发 web app 带来了一个很棒的方案。就像上面提到的一样,有很多酷炫的应用是使用这个框架开发而成的。它赢得了 Ruby 开发者社区的青睐,包括我们 Smashing Boxes 自己的 Ruby 开发团队。如果你是 Ruby 开发者,Ember将会是很好的选择。有成千上万的文档介绍了如何融合这两周技术进行开发。想知道如何将 Ember Cli 和 Rails 集成到一起?没问题,这里有一个专题连载告诉你怎么做

Ember 同时也是那些喜欢一站式开发框架的人的最好选择。我们往往浪费了大量的时间去探索、研究,尝试整合那些并那么适合互相搭配的库。Ember 帮你做了大量的决策,这些决策帮你节省了宝贵的时间。这两种方案各有利弊,然而那些崇尚“够用就好”的人会喜欢Ember的。

0?wx_fmt=png

7REACT 1.0 (应该和0.14大同小异)


React 是3个当中最轻量级的。事实上,它都不能算是框架。它其实只干一件事:渲染UI组件。甚至有人拿它和前面两个搭配。当然了,更普遍的用法是搭配一种名为 FLux 的架构方案。 Flux 有别于传统的 Model-View-Controller。像 React 生态系统里面的其他部分一样,这仅仅是一个功能单一的库。它负责将视图层的变化传输到数据层。它并不包括其他框架常见的与服务器端通信、数据校验或者注入依赖等。当然了,如果你需要的话,你会找到其他库来解决这些问题的。

Facebook 创造 React 是为了解决他们自己希望在不同页面中保持UI一致性的问题。刚发布的时候就因为它出色的性能和服务器端渲染能力引起了轩然大波。而这两个特征正是其他同类竞争对手一直在努力但尚未实现的。让人欣慰的是 Angular 和 Ember 正在新版本中迎头赶上。

React 所带来的革命远不仅仅如此。最著名的要数 React Native。Facebook 在保留一套跨终端逻辑代码的同时获得了原生应用的性能。上月初,他们开源了安卓版的 React Native,给原生应用的开发增加了一种靠谱的选择。

8REACT 1.0 的主要目标是什么?


  • 官网改版

  • 改善文档

  • 增强对动画的处理

所有的这些都围绕着更好的开发者体验。目前最大的功能缺失是一种轻松地创建动画的方式。既然计划中的改动如此之少,想必1.0很快就将要正式发布了吧。

优点缺点
性能Flux 架构打破了大家的习惯(需要一定的上手时间)
服务器端渲染很多人不喜欢JSX(虽然JSX并不是必须的,但是很常见)
原生应用支持
简单
库的思路(自由组合)
ES2015语法支持

9谁应该选择React?


React 无论对新项目还是老项目来说都同样是很好的选择。你可以很容易地把UI层的某部分抽出来用React重构。这对于渐进式地改造老项目来说是个好办法。在 Smashing Boxes ,我们的很多前端工程师都越来越喜欢这个库了。React 和 Flux 的组合也让开发 web app 项目中最复杂的部分变得容易了。

React 在过去的两年里引领了客户端MVC发展的进程。其他的框架都在努力模仿很多React已经实现了的东西。技术社区的喜新厌旧也由此可见一斑。大多数的 React 项目都是用 ES2015 写的,尽管浏览器并未完全支持 ES2015。如果你是最新潮技术的追逐者并且喜欢轻量的库胜过框架的话, React会是你的菜。

10实例对比


已经有人分别用这几个框架开发了功能和界面都一样的 TodoMVC app,我对此有几点看法。首先,这些框架看起来越来越趋同。尽管他们各自都有自己独特的特性,但是在很多好的方面都比较一致。单向数据绑定就是一个很好例子。同样的,他们三个也都将实现以XML节点为基础的组件。

在这三个框架当中,Ember是上手最快的一个。只要一启动,你马上就拥有了一个具备自动更新功能的本地服务器和相关的最佳实践引导。而对于其他两个来说,你还得花时间自己去配置 WebPack 或 Gulp 来让你的项目跑起来。你需要关心项目的文件结构是如何组织的。或者你需要花时间去找一个初始模板。基于约定大于配置的原则,Ember把这些都帮你做了。

是的,于我而言,在这三个框架中,Ember花了我最长的时间去学习。仅仅只是做这个一个小小的试验项目,有一种杀鸡焉用牛刀的感觉。所以呢,Ember有它比较典型的应用场景,不符合这种应用场景的情况下用起来很别扭。这两点对 Rails来说也是一样的。 Ember 给我的感觉比较适合多人开发且周期较长的大型项目。

相比之下,另外两个框架更符合我的预期。Angular 2.0 给了我一点小小的惊喜。因为和 Angular 1.X 完全不同了,但是当我找到了一些例子之后上手很快。

从最终的代码量来看,Angular app 的代码量最少。React次之。怎么说呢,我感觉在写React的时候思路比较清晰,“是的,我应该把这部分逻辑抽象到它自己的组件里去”。虽然这样增加了代码行数但是对未来的维护来说更轻松。在 Angular 和 Ember 里面很容易就会在模板里面写太多逻辑代码或者是给组件增加很多方法。

最终的生产代码流量大概占100K,在本地测试服务器中加载需要300毫秒。这个 TodoMVC 实在太小了所以体现不出来三者的性能差异。尽管如此,我们来看看 DBMonster 针对3个框架做的评测 (在墙外) 。 这个 app 成了 Ember 的 Glimmer 引擎的见证。现在我们可以放心地说三者在压力测试中都性能表现良好了。

11谁是最后的赢家?



Angular 2.0(1.0)Ember 2.0React 0.14
Github Stars5.9k(43.3k)14.9k29.7k
Github 贡献者158(1,331)536531
StackOverflow 提问127k16.9k6.1k
StackOverflow 粉丝19k2.4k2.5k
最早发布年份200920112013
框架文件大小566KB427KB132KB

显而易见:这三个框架为什么这么火主要是因为他们都有各自的强项。正因为如此,我建议你三个一起学,就像我们 Smashing Boxes 一样。没有绝对的赢家。不同的框架适用在不同的场景。即使不考虑其他原因,把这三个框架都学习一下也可以帮你写出更好的代码。

于我本人而言,我真心喜欢 React 及其相关的生态。它的基础概念很容易上手。基于较少概念的开发很容易,并且哪怕项目变得复杂了也具有良好的扩展性。我没办法量化这一点,但是它的理念有助于让我写出正确、零bug的代码。如果我现在要开始一个新项目的话,我会选择React。

话虽如此,这三个框架的前途都是光明的。他们的下一代正式版本都将显著提升性能并支持服务器端渲染。Angular 和 React 都将支持iOS和Android平台的原生应用开发。我们可以借助这些框架做很多以前做不到的事了。已经熟悉了这些框架并希望在有趣工作中深入实践?

640?wx_fmt=png

版权声明:“并发编程网”所推送文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,我们会在24小时内删除处理,谢谢!^_^18634795651

640?wx_fmt=jpeg
微信号:并发编程网
长按、关注
640?wx_fmt=png 640?wx_fmt=jpeg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值