为什么要叫“前后端分离”、“服务端渲染”

2023-06-04 15:25:58 +08:00
 x77

从通讯意义上来说,“前后端分离”恰恰是对前后端的通讯做了更好的设计或组织,也就是说前后端连接变得更为有序而不是分离。

从正经的渲染( render )概念上来说,渲染是通过程序及图形硬件把数据以图像的形式呈现,就浏览器渲染 HTML 来说,浏览器最终需要吧 HTML 上的文本、图片、音频按照 HTML 的排版在屏幕上渲染出网页图像。

客户端理解前端概念里的“分离”却分离,“渲染”却没渲染,不明白前端为什么要起容易产生歧义的叫法,为什么不用“WebUI”、“服务端生成 HTML”等更为准确(我觉得更准确)更容易表示本质的叫法。

6411 次点击
所在节点    程序员
41 条回复
fd9xr
2023-06-04 15:34:25 +08:00
因为 中文不是编程的基础语言
codehz
2023-06-04 15:40:10 +08:00
主要还是类似 react 这样,把 vdom 变成 dom 的过程叫做 render 吧(所以没有 dom ,直接到一个 stream 里,也可以算 render )

render 翻译成渲染其实是一些翻译上的问题,本身和“图形渲染”并没有那么强的关联,字典里查的话,更偏向于“把某样东西转换成另一个东西或者状态”的义项,和图形渲染稍微有些联系的另一个义项则是给予 /提供 /表达 /表演这个含义
所以 render 放在这里我认为没啥问题,当然翻译上确实可以用更好的词汇)
https://react.dev/reference/react-dom/server
westoy
2023-06-04 15:42:29 +08:00
SSR 不就是 Server Side Rendering 么

再往上追溯, 服务端的大量模板库生成 response 内容一般都定义成 render 方法
cmdOptionKana
2023-06-04 15:48:45 +08:00
因为人类语言不是设计出来的,而是生长出来的。

你认为一种表达方法更好,你可以自己使用,也可以倡议大家去用,但最终多数人如何表达,你很难控制。就连国家语言规范都要根据多数人的错误表达方式去修改规范,让规范符合多数人的习惯。

也就是说,人类语言并非绝对理性的,也不是精雕细琢优化出来的,而是很混乱的,充满不合理性的。
paradoxs
2023-06-04 15:54:29 +08:00
实际上叫什么都可以, 没有一个强制要遵守的规范。

和食品安全、建筑安全、医疗安全 之类实打实的有刚性要求的不一样, 软件这些东西,能跑起来就行。
fds
2023-06-04 15:58:26 +08:00
因为最早就是 服务端生成 HTML ,浏览器每个请求都是找后端重新刷一个完整的 html 。
后来 ajax 兴起后,浏览器除第一次下载页面外,后面可以直接找服务端要数据,生成一部分新页面,而不用取完整的 html 。这就出现了“前后端分离”,前端主要管理界面,后端管理数据。
后来浏览器第一次下载的程序太大,然后前端还得自己生成界面,速度不如直接让服务器生成快,所以又让服务器端预先渲染一下,降低浏览器压力,但之后的交互还是浏览器自己更新页面,后端主要传数据,跟最开始的“服务器生成完整 html”还是有本质的不同的。
achira
2023-06-04 16:18:19 +08:00
别咬字眼你的生活会愉快许多。
fkdog
2023-06-04 16:34:26 +08:00
更合适的说法应该是展示层和业务逻辑层的分离.
以前有很多 UI 展示技术, JSP 、JSF 、Struts 、Freemarker 、velocity 之类的服务端模板框架.
实现起 ui 实在是太笨重了.
后台干脆就服务端应用只吐 json, UI 层渲染交给纯前端开发团队处理.
至于服务端渲染, 也只是为了解决前几年 SPA 应用 seo 的问题.
taotaodaddy
2023-06-04 17:00:08 +08:00
别咬字眼你的生活会愉快许多。+1
x77
2023-06-04 17:10:42 +08:00
@achira
@taotaodaddy

不用从一个贴文臆测别人生活与不愉快吧。
taotaodaddy
2023-06-04 17:11:11 +08:00
没写完就发出来了...很同意 4#回答,很精炼但是很单位: 语言是生长出来的.
啰嗦两句:
从现状看,同一个词是存在多种用途不同含义的.渲染不是只有计算机图形学这么一个定义,在 web 领域,渲染这个词也是存在的,和计算机图形学的渲染,不是一个意思;在中文这里延伸一下: 渲染气氛,它也用"渲染".
从生长看,很多时候,用“服务端生成 HTML”这种冗长的定义,不符合人类的习惯,人们会借用一个已经存在的很短并周知的单词来指代它,这种情况太多太多了,且不限于计算机领域.
UP 的问题其实是属于语言进化和传播领域的问题.
taotaodaddy
2023-06-04 17:12:16 +08:00
@x77 抱歉...
x77
2023-06-04 17:13:05 +08:00
@taotaodaddy 没事
akira
2023-06-04 17:19:42 +08:00
计算机学的这些还好,大部分是翻译问题, 我们无法要求所有从事翻译工作的人都能做到 信达雅。
大部分人都能接受的翻译也就继续沿用下来了。
flyqie
2023-06-04 17:57:09 +08:00
不要咬文嚼字。。

这翻译没啥问题,别忘了还有鲁棒性这种从字面上完全看不懂的翻译。。
james122333
2023-06-04 18:03:41 +08:00
这两个是不同的 你可以前后端分离 但前端是前端服务端渲染 没人说前端分离后不可以用服务端渲染 只是渲染的东西就不会是数据
james122333
2023-06-04 18:05:10 +08:00
数据相关的服务端渲染就会降低 还是有好处
sentinelK
2023-06-04 18:08:59 +08:00
“分离”指的是开发分离。
这有特殊的历史背景,既 jsp 、asp 的大量使用。

“渲染”其实指的是排版。既 html 上的内容由服务器端填写,并不依赖客户端的 js 脚本逻辑填充。这里面也有个历史原因。“渲染”这个词在 vue 、react 时代,被培训班大量滥用导致混淆。培训班把填充 html 普遍叫成“渲染”

所以综上所述,名词的定义,一定是随着时间逐渐腐败、泛化的。区别就是你接受与不接受。
zhanying
2023-06-04 18:11:05 +08:00
随机存储器:¯\_(ツ)_/¯
adoal
2023-06-04 18:16:05 +08:00
这也怪培训班?还特么的从 vue 、react 时代?

英语原文里早在不知多少年前就用 render 表示根据 HTML 模板和实际数据来生成最终页面的过程了。

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

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

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

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

© 2021 V2EX