在服务器端vs客户端vs混合中构建Web应用程序?[关闭]


27

当前有多种构建Web应用程序的方法:

1.仅服务器端

这是一种经典方法,您可以通过Ruby on Rails,Django,Express,Play等Web框架在服务器上呈现页面。框架等

典型的工作流程:在您选择的框架中,在服务器上构建所有业务逻辑,模型和视图模板。

2.客户端+ REST API

不久之前,整个Web社区开始在Angular,Backbone,Ember和其他几十个JavaScript MV *框架中构建客户端应用程序。现在我们也有React.js参加了聚会。

更新:没有误会。我所说的客户端仅是完全分离关注点。您有REST API服务器和与该服务器通信的客户端应用程序。根据您的用例,您将永远不会有一个真正的仅客户端应用程序,该应用程序既不连接到后端也不进行身份验证或数据持久化。

典型的工作流程:花几个小时来确定Angular,Backbone,Ember和X。然后在客户端上构建路线,模型,视图,控制器。完成后,现在在服务器上构建模型,控制器,路由。从某种意义上说,您正在做两倍的工作。

3.混合动力

我对使用这种方法了解不多,但是如果我猜测的话,您可以在服务器上呈现视图(MVC框架的视图)。结果,您可以获得SEO支持以及更快的页面加载速度。

Hybrid前端,有Airbnb的rendr,据说它结合了主干并表达在一起。

Eric Florenzo今天在他的博客上发布了:React:最后,一个很棒的服务器/客户端Web堆栈

构建Web应用程序的方法数量不胜枚举。对于正在学习Web开发的人来说,这可能会成为一个问题。如何决定使用哪种方法来构建其下一个应用程序?


1
“仅限客户端:...完成后,现在在服务器上构建模型,控制器,路由。” 这不会解析。
user16764 2014年

@ user16764更新了我的问题。
评分

Answers:


13

我认为您完全误解了“仅客户端”。

首先,应将其标记为“以客户为中心”。像Angular这样的框架的整个要点是,MVC的“ VC”部分完全在Javascript浏览器中实现。“ M”部分(模型)的“ M”高级逻辑在浏览器中实现,而较低级别的“ CRUD”逻辑在服务器上实现。

业务逻辑只开发一次。视图逻辑仅开发一次。控制逻辑只开发一次-全部在所选的Javascript框架中进行。数据访问逻辑也仅开发一次,但是这次是在服务器端选择的任何RESTy或SOAPy框架上开发的。

在极端情况下,如果只允许从一台计算机上的一个浏览器访问数据,并且每次选择“清除Cookies”选项时都将数据丢弃,则可以完全在客户端中实现模型。


真的很难不两次开发至少一些业务逻辑。为了获得良好的用户体验,您需要确保用户输入其电子邮件才能继续。但是您不能信任客户端,因此还需要在服务器上实施规则。至少我真的希望您不要在客户端上用JS实现业务逻辑。
2014年

@Andy正是我的意思。当我构建一个Ember应用程序时,必须在客户端上完成基本表单验证,但也需要在服务器上完成。一次我因无法验证服务器上的数据并完全信任客户端而遇到了严重麻烦。
评级为R

Andy et all-看一下Google文档。除了从服务器加载文档,电子表格等之外,最后保存文档,并偶尔在浏览器之间进行其他所有操作之间的备份。Google文档网站仅充当数据存储和身份验证服务器。
James Anderson

3
@JamesAnderson Google文档与在线商店大不相同。您正在编辑自己的文档,文档只是它们保存的一滴数据,而实际上并不关心数据的含义。但是,您是否真的认为仅应在客户端上执行订单验证?您只是在要求人们为自己提供免费产品,如果这是您开发此类应用程序的方式。您似乎还假设Google实际上不在服务器端进行任何数据验证。我们实际上没有任何办法可以知道发生了什么。
安迪

9

这个问题的答案是,它取决于要求。至少粗略地浏览一下“ Web”开发的历史,就表明了一种牛仔文化,在这种文化中,与利益相关者,客户,需求收集的交谈常常被忽略。

几年前,我很幸运地参加了一次演讲,在那次会议上我听到了一个真正困扰我的事情:“您选择符合要求的设计,而不是符合设计的要求”。因此,当遇到这样的问题时,您需要找出要求您构建此软件的人员的实际需求。

您的工作是解释每种方法的优缺点。


1
谢谢。你说的话很有道理。我希望有一种“银子弹”,一种做事的真实方法。我从2011年开始使用一个名为Django的Python网络框架。不久,人们大力推动了客户端MV *框架,例如Backbone,Angular,Ember。突然之间,Rails和Django构建Web应用程序的方式已经过时了。但是今天,我们似乎已经退后一步,再次将客户端和服务器端混合在一起以获得更好的性能。
2014年

可悲的是,不,没有银弹。:)。但是,诀窍是要充分了解各个部分如何组合在一起,以确定手头任务的最佳结果,并支持无情的重构文化,以便您可以在最初的方向无效的情况下随时进行更改。
RibaldEddie 2014年

1
很好,几乎所有方法都可行,在这种情况下,您需要做出决定以外的其他要求。
Ced 2015年

5

我认为,更新的方法和框架的关键点之一是前端技术和后端技术之间的耦合较少。

这个想法是,您可以在客户端上使用任何框架,并从任意数量的源中提取数据和/或视图,而与服务器端框架无关。

这使我们可以选择最好的工具来完成工作,并且我们的选择可以独立发展。

诚然,我没有使用Angular或Backbone,所以我无法提出任何有经验的建议。我当前的基本堆栈由我可以找到的最薄的服务器端mvc或静态服务组成。主要提供模板和数据。仅使用普通的javascript,jquery和css呈现数据和/或随后检索客户端的数据。

我从这里开始,并在此基础上继续发展。当您考虑支持多个客户端平台(浏览器,移动设备等)时,此方法的好处显而易见。如果需要客户端特定的呈现,则无需在服务器端进行大量更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.