关于前后端分离的理解。

2016-05-25 10:25:12 +08:00
 hujianxin

大家好,我是一个刚入门的后端程序员(算是吧)。使用 django 开发了两个简单的网站,最近实验室有一个小任务,我想借着这个机会了解一下前后端分离的技术,要不然就真的太落伍了。

关于前后端分离,我一直没有一个清楚的概念,自己心里有一些想法,但是非常不自信。

所以,我在下面说一下自己的理解,希望有经验的大哥帮忙指教一下。

第一类,通过 nodejs 作为一个中转站, nodejs 虽然运行在服务器上,但是它处理的是前端显示的业务,例如路由,所以它是前端的一部分,后端使用其他的语言来处理数据问题,然后与 nodejs 通信。 第二类,通过前端框架来实现显示逻辑,例如路由,读取 api 等,这些任务都是浏览器来完成的。然后后端用其他任何语言来提供前端所需要的 api 。

上面是我自己的理解,望指正。

14064 次点击
所在节点    程序员
64 条回复
dphdjy
2016-05-25 12:25:49 +08:00
楼上 aksoft 的分久必合合久必分概括的多精炼~
开始全揉在一起,类原生 PHP/JSP 的写法
中间也就是 2k 年到现在推行 SAP 单页应用,前后端分离,把 View 层完全交给浏览器,和 Server 通过 Socket/Ajax 交互
最近由 Nodejs 兴起的是同构(Isomorphic),由 Server 对 SAP 应用进行预渲染

所以除了同构,均不是 Nodejs 的东西,如果说把模板分离由 Nodejs 单独渲染,这是大型应用架构中的“前端服务器”,并不属于 web 开发的前端方向,例子 Taobao 的部分页面,然后与之对应的后端服务器集群主要做数据和逻辑处理。

然后在游戏服务开发也存在这几类服务器的叫法,最前面的做负载均衡,前端处理 View 相关,后端处理数据和逻辑。

所以这几个问题的前端是跨业务的不同的东西,无需深究,就酱~
hujianxin
2016-05-25 12:48:12 +08:00
@morethansean 你好,这个问题我问的时候就是抱着你所指出的观点来问的。不过有的朋友和我对前端的定义不太一样,所以产生了误会。
ayaseangle
2016-05-25 12:50:18 +08:00
前后端并没有明显分界线。。。
g0thic
2016-05-25 12:52:22 +08:00
前后分离其实和 Node 没啥关系,最简单的前后分离方案,后端提供 HTTP API ,前端通过 Ajax 调用 API 获取数据渲染页面,服务端再配置下 Nginx 基本上就可以实现一个简单的前后分离方案了。

但是这个方案太简单了,不能满足我们日常的需求,所以就引入了 Node 来解决,但这里又有区别,有的只用 Node 做一个中间层,比如做一些简单的登录权限校验,做一些数据处理,模板渲染,也可以做一些简单的路由等等,接口还是后端 Java 等提供;但是也有的人直接用 Node 来写业务提供 API ,这些都可以通过现有的 Node Web 框架 Express 、 Koa 和相关模块来解决。但是后者可能就要招专门的 Node 工程师来开发维护了,前者一般的前端就可以完成了。
hujianxin
2016-05-25 12:52:24 +08:00
@dphdjy 多谢回答,看到你的回答我觉得我知道我问的问题的答案了。上面和其他朋友产生的分歧的原因很多在前端的定义上。我的疑问很大部分是 nodejs 到底是什么角色,什么作用,应该分为前端吗?你的回答很专业,谢谢。
hujianxin
2016-05-25 12:53:42 +08:00
@g0thic 谢谢回复,很收益
dphdjy
2016-05-25 12:59:54 +08:00
@hujianxin 并不专业,更多是抖机灵~~
这个才是前端工程师的比较准确的解释(大概
https://zh-cn.facebook.com/notes/10152095506555563/
g0thic
2016-05-25 13:04:12 +08:00
@hujianxin 至于 Node 是不是前端的东西,这个因为它和 JS 的关系所以很多人的看法都不一样,没必要去在意,因为每个人的经历不一样看待的角度也不一样,有的人是从写页面到 Node ,也有的人可能是从 Java 到 Node ,他们处理的问题不一样看待的角度不一样,结论肯定也不一样
neilwong
2016-05-25 13:43:45 +08:00
@BOYPT 请不要这么武断,现在有一种分层模式就是把 web, android 客户端, ios 客户端统称为前端,其中路由和模板逻辑也是需要 web 来实现的,如果 web 使用 nodejs 控制路由和模板,归为前端也是正确的。然后没有后端这个概念,而是称为 server 。
eric6356
2016-05-25 13:44:42 +08:00
前年的 jsconf 有一个淘宝的前后端分离实践讲得挺好的.
http://2014.jsconf.cn/slides/herman-taobaoweb/#/
neilwong
2016-05-25 13:53:11 +08:00
@hujianxin 建议你不要用语言或者技术来划分前后端,而是从做什么的逻辑上来划分,如果你用 nodejs 来构建 react ,压缩代码,使用 express 来负责路由,模板控制,那 nodejs 和 express 就属于前端,如果你用 nodejs 和 express 来写 api 或者消息服务,那 node 和 express 就可以归为后端或者服务端。 但是请不要在一个代码库里又做前端代码构建又做 api ,这就属于典型的前后端不分离。
yixiang
2016-05-25 13:55:27 +08:00
这贴看下来还以为是在讨论字典里“前端”这个词条要怎么写。
hujianxin
2016-05-25 14:02:53 +08:00
@neilwong 谢谢你的建议,你回复到了我问的问题的根本,受益匪浅
BOYPT
2016-05-25 14:08:15 +08:00
@neilwong 看了你贴的链接总算明白你说的什么了。
你帖子的内容基本来自《五、 Node 带来的全栈时代》 这一节里面,这个的代表就是用 electron 开发原生应用,因此“ node 参与了前端”。

一个例子就是 Atom 编辑器,集成了 Node 和 Chromium 的一整个应用程序,这里面整套 Node+Chromium 才叫做 Frontend ,至于 backend , apm 插件库算么?哈哈……整个架构都已经是 cs 结构了。

我个人意见,前端后端在中文领域,都是侠义的指 bs 结构的应用,有明确的 browser - server side ; 你偏要往大面积来套前后只有混淆概念,没人想跟你说话。
neilwong
2016-05-25 14:40:24 +08:00
@BOYPT 你好像 at 错人了吧...我没有给你贴链接。。。。

另外我也我没有给你大面积套前后来混淆概念,随着 react native, angular 2.0 以及 hybrid app 的火热,现在 web 和移动客户端的界限也越来越模糊, pc , h5, 微信端, android , ios 所实现的都是呈现给用户一个可交互的前台,统称为前端有什么问题么? 不要动不动就没人想和我说话,以前我的概念也是认为前端就该好好在浏览器这个沙盒里呆着,抵触 scss,coffeescript,jade,webpack 。但是现在时代不同了啊,少年,没必要老守着陈旧的观念不放。
BOYPT
2016-05-25 14:51:23 +08:00
@neilwong 有问题,而且问题蛮大,你去招聘网站找一下“前端”这个词是指什么开发?
你自己理解的“前端”统称交互,但是“ 微信端, android , ios 所实现的都是呈现给用户一个可交互的前台” 在业内是称作 UI 开发。
你以前是抵触技术,现在是抵触词汇概念了?
rupert
2016-05-25 15:49:30 +08:00
@BOYPT 你老了 不想辩 不想跟你说话
neilwong
2016-05-25 15:53:18 +08:00
@BOYPT 建议你看下维基百科的词条
Front-end (computing), an interface between the user and the back end. The front and back ends may be distributed amongst one or more systems
前端的定义本来就是用户和后端的 ui 接口,只不过早期没有 app ,所以前端只狭隘的指 web 开发人员。
到底是谁在抵触技术和词汇概念?
另外申明我从没有抵触过技术,只是早期我的错误观念认为 scss,jade 会提高学习成本但是对项目帮助不大才会抵触
hujianxin
2016-05-25 15:57:23 +08:00
@BOYPT 链接的第五条哪里有 electron 的事啊,你没认真看链接就忙着回来反驳了吧?通知,以获取真知为荣,以辩驳争胜为耻啊。你还是别跟我说话了。
neilwong
2016-05-25 15:58:08 +08:00
@BOYPT 现在招个前端写 app 和微信服务号的多了去了,不清楚您老是不是做前端的,都不想和你说话了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/281092

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX