白银时期
而为了使 Web 更加充满活力,开拓者们一次又一次的对动态网页这一高地发起进攻,紧张目标是许可网络开拓职员快速编写动态页面。这一个阶段,以 PHP、JSP、ASP.NET 为代表的动态页面技能相继出身。在这些动态页面技能面前,网页不再是静止的,可以根据不同的人,不同的地域,不同的韶光段呈现出不同的数据结果,从这时开始,Web 发展进入了其“白银时期”。
黄金时期???
随后,各种各样的网站如雨后春笋般涌现,网站的繁芜程度也呈爆炸式增长,程序员既绘制页面又掌握业务逻辑的难度也越来越大,这时,前后端分离的观点被提出来了。核心理念是「让专业的人做专业的事」。于是,程序员的职业发展来到了一个分叉点,是选择专门绘制页面的程序员还是专门掌握业务逻辑的程序员成为了一个辩论点,直至今日。
在这个阶段,前端是完备不须要参与后台的数据处理,他只须要利用约定好的接口拿到得当的数据,然后渲染页面即可。而且这么做的一个好处是,开拓进度不会堵塞,后端开拓不须要等待前端完成之后才能连续,只要 Mock 完全数据之后前后端联调即可。
前后端分离的寻衅
那这个阶段,是 Web 发展的“黄金时期”吗?
私以为不是。
前后端分离是一个非常好的思想,让专业的人做专业的事情这一美好愿景,在实际的过程中却受到了很多寻衅。 举个例子,前真个接口常日是按照逻辑来展现数据的,有时候为了提高效率,后端会根据前端须要的数据构造做数据封装。这就意味着后端还是做了 view 层的事情,违背了前后端分离的初衷。
Web 系统架构的中间层为理解决上述问题,有人发起干脆把 Controller 和 View 的事情都转移到前端,后端只卖力处理 Model 的数据与底层逻辑。于是 Node 中间层这个办理方案就被提出来了,这种方案好不好我们暂且按下不表,先来说说这一个中间层的职能是什么以及架构是什么样的。
中间层架构实在中间层要做的事很大略。
原来客户端直接向 Server 发送要求,Server 层收到要求后经由打算处理将结果返回给浏览器。如今浏览器将要求发送给 node 层,node 层经由一轮处理后再向 Server 层发起要求。Server 层处理完毕将相应结果返回给 node 层,node 层末了将数据返回给浏览器。由于 node 层的涌现,Server 层可以只用关注业务本身,而不必理会前端对字段的分外哀求。
而且,由于增加了 NodeJS 层,每种前真个界面展示逻辑由 NodeJS 层自己掩护。产品经理在中途如果想要改动界面,可以由前端自己掩护,无需后端操心。前后端各司其职,后端专注于自己的业务逻辑开拓,前端专注于产品效果开拓。这样就实现了更彻底的前后端分离。
乍一看是不是以为这个方案很完美呢?但事实真的是这样吗?
太阳底下无新事细心留神文章里的图,就会创造全体系统越来越繁芜,系统繁芜会带来很多问题,比如职员沟通本钱增加,系统整体性能低落,安全隐患增加等等。这些都是旧调重弹的,只假如增加系统的层级就一定会涌现这些问题,还有什么其他的问题吗?
我们先思考一个事情,这些东西是不是非 Node 不能做?
显然不是。在 Node 做中间层之前,这些事情本来便是由传统的后端去统一做的,理论上只要在做事层做好分层架构的设计,这些问题都会迎刃而解,那么为什么这几年还会有人鼓吹 Node 中间层呢?
有人会说 Node 很适宜做 SSR(做事端渲染)。的确这是 Node 的一个上风,但还是那个问题,这件事是不是非 Node 不可?
现在利用 Node 做 SSR 的,是不是以为设计理念和多年前的 JSP 很相似呢?
那么究竟是什么缘故原由,让这么多人去探索这条道路呢?
下面是我的私货环节。
我的不雅观点事先申明,以下内容,纯属个人不雅观点,不喜勿喷。
我们先来看一个段子:「PHP 是天下上最好的措辞」
相信听到这句话的人一定会以为很可笑,虽然这已经成为了一个段子,但是反应的却是一个客不雅观存在的情形——鄙视链。
鄙视像条食品链,是个绕不开的怪圈。在这个怪圈中,每一个人,都在链条的最末端。
而之以是会有这样的鄙视链涌现,和事情难度及报酬有很大关系。
一个好的系统该当是 高可用的、高并发以及高性能 的,而这三者,常日是后端程序员的事情,前端程序员所能发挥的浸染有限。干的活不主要,报酬自然提不起来,鄙视链也应运而生了。
于是,为了反击,学习本钱低、可以迅速上手的 NodeJS 便被前端程序员们寄予厚望,开始接管一些后端程序员不愿意去做的边角活(数据格式转换,字段校验),想着前端卖力的职能不再是绘制页面这种根本的事情,主要性就会逐渐凸显出来。
说到底,还是由于前端要提升在业务中的比重,由此提升自己的地位。至于 NodeJS 和传统做事端措辞比较究竟有没有一战之力,彷佛也就没那么主要了。说不定未来 Node 中间层发展好了之后,再进行解耦拆分也说不定呢。
于是你会创造,公司里的前端同学每每会以架构设计为情由推动后端职员在全体系统设计时增加一个 Node 中间层,好让他们大展拳脚,至于后端职员愿不愿意去把这些边角事情交由 Node 层职员去做就值得商榷了(毕竟后端也有很多方案处理这种数据需求,比如 GraphQL 便是个中一种)。
套用盗墓条记里的一句话,「最繁芜的不是软件系统,是民气」。