我一直在评估许多SPA框架.我坚持以下两个,无法决定我应该使用哪一个项目:
Angular 2
奥里利亚
这两个框架都承诺进行大量的操作.我非常为角度2感到兴奋,因为它得到了Google的支持,并且已被许多大公司采用.所以我做了一些比较我自己(手指交叉)的借口给Angular粉丝;).我也是粉丝,但.....
这是我做的:
Angular 2
从https://github.com/angular/quickstart/archive/master.zip下载QuickStart
按照快速启动和运行应用程序的指示,到目前为止一切顺利
现在来看看chrome Developer工具中的Network选项卡.哇,我看到至少36个http请求和这个简单应用程序的总大小约为1.4MB缩小.
谷歌搜索了一下,发现我们可以通过遵循AOT,treeshaking,gzip等很多其他方法来减小大小并最小化直到50k和http请求到10.很公平.
最后比较编码风格:为了只显示Hello Angular,我们需要创建main.ts,app.module.ts,app.component.ts.每个文件必须包含@Component()装饰器,因此几乎需要在每个模块上导入角度核心.然后将该组件导入module.ts,然后引导main.ts.
奥里利亚
从http://aurelia.io/downloads/basic-aurelia-project.zip下载
按照快速启动的说明进行操作.
添加了两个带有hello world的app.ts和main.ts文件.
到目前为止运行它运行的应用程序非常好.
检查开发人员工具中的网络选项卡,它显示0.9MB并发出9个http请求.
按照相同的步骤使用gzip和捆绑最小化大小后,它会产生大约170kb的5个http请求.
最后比较了两种框架的编码风格.显然,Aurelia有一个易于理解的清晰代码.
我在Aurelia看到的唯一的缺点是它是一个相当新的,几乎不为许多JS开发人员所知,并且到目前为止社区也很差.
我将它们视为Microsoft Windows(Angular 2)和Apple(Aurelia).另一方面,Apple更稳定并且具有特定范围的用户Microsoft Windows几乎每个地方都有.
我该怎么办?请帮忙.
谢谢
也许,下面的AMA对你有用,虽然它现在有点老了:AMA与Aurelia Team
最重要的问答是以下(仅引用):
您是否认为Angular 2.0偏离了标准?Aurelia的目标是符合标准并且独立吗?
在这种情况下,这不是信仰问题,而是事实.如果您查看HTML规范并查看Angular 2,您会发现它们并不和谐.
一年多以前,Angular 2团队介绍了他们的符号绑定语法.虽然这是技术上符合标准的HTML,但社区指出它不符合SVG(我还没有确认自己).虽然社区成员指出了这一点,但Angular 2团队没有改变他们的设计.从Beta 2开始,他们实际上采用了额外的属性/元素语法,这种语法涉及区分大小写的约束.HTML不区分大小写,因此符合规范.因此,实际上不可能让Angular 2与浏览器的解析器,DOMParser API甚至innerHTML本地工作,因为这些机制根据浏览器以不同的方式"规范化"套管,因此套管不能被"信任" ".这意味着,如果Angular 2依赖于套管(即ngFor和ngModel attrs),那么浏览器将无法原生地处理它.为了解决这个问题,我的理解是Angular 2团队必须实现他们自己的专有标记解析器.一句话:我不确定他们称他们的视图语言是什么,但它不是HTML.
对于Aurelia来说,标准合规性非常非常重要.我们努力与当前和新兴标准保持一致,不做任何与他们发生冲突或违反标准的事情.我们必须添加尚未涵盖的其他功能(例如数据绑定),但我们已经以符合现有和新兴Web标准的方式完成了这些功能.我们计划无限期地以这种方式继续,因为我们希望Aurelia开发人员成为优秀的Web开发人员.
我来自棱角分明,我为什么要使用aurelia而不是角2?我的优点是我已经知道棱角分明,并且有庞大的社区.谢谢.
首先,我认为在这里纠正这个假设很重要.假设Angular 2只是Angular 1中的增量或进化变化.但事实并非如此.Angular 1和Angular 2之间唯一相同的是字母A,N,GU,L,A和R.它们是两个完全不同的框架,用不同的编程语言编写,具有不同的架构,不同的概念,不同的开发方法论,不同的能力,不同的社区......不同的一切.
我在这里的肥皂盒上......但我认为将这个框架称为Angular有点欺骗.这是一个全新的,不同的图书馆,与旧的没有联系.应该给一个新名字.但是,由于你提到的原因,他们给出了相同的名称.他们希望您不要考虑采用Angular 2,因为您认为它只是一种增量或渐进的变化,而不是完全不同的变化.
从Angular 1移植到Angular 2是一项巨大的工作,即使使用"迁移"工具也是如此,这些工具根本不是迁移工具.它们是整合策略.迁移实际上需要做很多工作.您必须完全重写并重新思考如何编写应用程序.一些Angular 1应用程序在Angular 2中无法实现,因为Angular 2已经锁定或删除了与UI的动态组合和观察绑定表达式相关的某些功能.
有趣的是,将Angular 1应用程序移植到Aurelia实际上更容易.我们社区中有很多人已经做到了这一点并且对这种体验非常满意.以下是Aurelia对Angular 2的一系列优势:
Aurelia是一个小得多的图书馆.Angular 2缩小750k,不包括路由器,动画或http客户端.这不是任何人都应该想到的永远生产的东西.Aurela缩小了350k,其中包括路由器,动画和http客户端.如果您的目标是现代浏览器并且不需要我们提供的所有polyfill,您甚至可以将该大小减少多达100k.
在独立的dbmonster重新绘制渲染基准测试中,Aurelia比Angular 2更快或更快.通过我们即将推出的ui-virtualization插件,它几乎是Angular 2的2倍.
Aurelia符合标准; Angular 2不是.有关详细信息,请参阅其他AMA答案.
Aurelia更好地支持分离的表示模式,例如MVVM.MVC和MVP.在Aurelia,视图和视图模型之间有一个清晰的分离; 所有责任都在适当的位置.在Angular 2中,您必须使用视图的内部实现细节配置视图模型,从而破坏封装并使重用视图模型或视图变得困难或不可能.它还大大增加了维护成本,并使开发人员团队更难以并行处理组件.
Aurelia非常不引人注目.在大多数情况下,您可以编写简单的ES 2016或TypeScript代码.您在JavaScript代码中看不到框架或根本没有看到框架.它不会挡住.这对于代码的寿命和维护以及可学习性和可读性非常重要.相反,Angular 2必须在任何地方导入,并且在整个代码中都需要元数据.它的配置非常重,与Angular 1一样多,只有配置看起来不同.
Aurelia与Angular 2之外的其他库更具互操作性,因为我们不使用摘要或不必要地抽象DOM.框架越接近标准,其保留的越多,它就越具有互操作性.
最后,Aurelia得到Durandal Inc.的支持.该公司的唯一目的是建立Aurelia及其生态系统并为其提供支持.另一方面,Angular 2是Google内部六个竞争UI框架之一.每个人都希望自己看起来像"谷歌祝福堆栈",但没有一个.实际上,Google官方并未支持或支持任何这些库.它们是构建它们的各个团队的开源侧项目.在Angular 2的情况下,它由绿茶团队建立,其真正的工作是构建一个内部CRM类型的应用程序.
还有很多其他原因......但这很少见.