为什么Angular/Ember/Backbone而不是常规的web框架

Why Angular/Ember/Backbone and not a regular web framework?

本文关键字:常规 web 框架 Angular Ember Backbone 为什么      更新时间:2023-09-26

所以我担心我可能错过了一些非常基本的东西,但我真的无法理解这一点-为什么?为什么我们要使用那些JS MVC框架,而不是坚持使用Rails、Django、PHP等等?

这些JS框架给了我们什么是旧的web框架无法实现的?我读过关于SPA的文章,在ASP.NET MVC中没有什么是我做不到的,对吧?

听到所有工作中的人都想离开我们目前的框架去学习这些新的框架,我真的很困惑,这不仅仅是为了学习新的东西。我完全支持这一点,我一直在尝试与其他框架一起玩,看看我缺少了什么,但也许这些新技术有一些我根本看不到的真正重要的东西?

单页应用程序通过使所有页面转换无缝来提供更好的体验。这意味着您永远不会看到用户操作之间的"页面闪光",此外还有一些其他的用户体验改进。

前端框架通常还提供一种与API接口的通用方式。因此,您不必为站点中的每个页面编写AJAX包装,而只需说"此页面具有此路由(路径),从API端点将数据与此架构挂钩,并使用这些模板和帮助程序将其呈现。"有很多API的支持者,因为有很多很好的理由从服务的角度编写应用程序。这次演讲总结了许多支持API的观点。总结:

  • 将您的web产品编排为服务,使它们内在地解耦。这意味着它们很容易被换掉。强大的面向对象设计原则背后的所有原因同样适用于应用程序的大部分。把每一块都当作一个独立的部分,就像一辆汽车一样,整个平台更加坚固和健康。这样,前照灯的缺陷就不会导致电机爆炸

    这与SOAP WSDL的工作方式非常相似,只是您有现成的自动创建工具。

  • 为应用程序的每个部分都定义了良好的触摸点,这使其他人更容易与之交互。这可能永远不会考虑到你的具体业务,但许多非常成功的网络公司(谷歌/雅虎、亚马逊AWS)已经根据这一原则创造了非常有利可图的市场。通过这种方式,您可以拥有由相同触点支持的多个产品,这减少了产品开发的大量工作。

  • 正如其他人所指出的,前端框架并不能取代后端服务器技术。怎么可能呢?虽然这看起来像是一个障碍("太好了,现在我们有两个产品要支持!"),但实际上这是一个巨大的福音。现在,您的前端和后端可以进行更改和版本,而不必担心无意中损坏其中一个或另一个。只要你坚持合同,事情就会"顺其自然"

    要在评论中回答您的附加问题,这是完全正确的。您使用一个前端框架来处理所有客户交互,并使用一个完全独立的后端技术堆栈来支持它

我忘了几个好的。。。

Angular、Ember和Backbone是客户端JavaScript框架。它们可以与Rails、Django或PHP后端互换使用。这些JavaScriptMVC只负责在浏览器中组织JavaScript代码,并不关心如何在服务器端处理或持久化它们的数据。

Django/RRails等是服务器端MVC框架。Angular/Backbone等是客户端Javascript MVC框架。Django/Rrails和Angular/Backbone协同工作-在一个单页应用程序中,通常服务器端MVC将为初始HTML/JS/静态资产提供一次服务,然后一旦完成,客户端路由器将接管并处理与应用程序的所有后续导航/交互。

这里的区别在于"单页应用程序"的概念。想想"常规"web Django/RRails网站是如何工作的。用户进入你的应用程序,后端获取数据并提供页面。用户单击链接,会触发服务器提供新页面,从而重新加载整个页面。这些传统类型的网站基本上是无状态,除了cookie/会话等。

相比之下,单页应用程序是一个有状态Javascript应用程序,它在浏览器中运行,看起来像传统的网络应用程序,因为你可以像往常一样点击和导航,但页面从不重新加载,相反,特定的DOM节点会根据应用程序的逻辑刷新其内容。要以可维护的方式实现这样的纯Javascript客户端体验,确实需要您开始组织Javascript代码,原因与您在服务器上的原因相同——您有一个路由器,它采用URL路径,并与控制器交互,该控制器通常包含显示/隐藏特定URL的视图的逻辑,您有一个模型,它封装了您的视图所使用的数据(将模型视为数据库结果的大致一行)。因为它是Javascript,所以有一些事件在发生,所以你可以让你的视图监听它的相关模型中的变化,并在数据更新时自动重新呈现它自己。

还要记住,客户端不仅仅有一个视图,通常有许多单独的视图组成一个页面,这些视图通常是嵌套的,这不仅是为了组织目的,也是因为我们希望能够只刷新UI中需要刷新的部分。

Backbone的介绍可能是这个主题的一个很好的开端:http://backbonejs.org/#introduction

查看这篇文章,已经很好地解释了现代web应用程序在客户端、服务器端以及它们之间的通信应该是什么样子。

顺便说一下:

客户端->Ember,Angular,Backbone,Knockout。

服务器端->Django,Node,Rails