大家可还记得, 十年前的网站,是如何搭建的。 一名网站开发人员需要会ASP/PHP/JAVA/NET, 以及HTML, CSS 还有简单的JS, 最好能用flash做一个banner。
我是从三线小城市的网络公司走出来的。 当时的建站,就是现在的全栈, 甚至还要会ps去设计网站, 切图,用table布局,加锚点。最好能用js做个滚动的列表。
常常做好一个企业网站, 你就可以接很多企业网站的活,因为都是通用的, 复制项目文件, 稍微修改下,既可以交付。
那可真实网站开发者的黄金时代啊。
我在那黄金时代末期出道,好不容易学会来用NET建站,连接是access数据库做着CDR的操作。 带着满满的自信来到了大上海。 结果,前后端分离了。 那时被硬塞了两个词进脑子,前端,后端。
求职的时候,HR问,你想做前端还是后端,我说我想做网页设计。 然而不是设计背景的我,被划分到了前端。从此,我便是一名前端,一直到去年。 现在,我是一名nodejs全栈。
接下来就是jquery时代,利用ajax发起XHR,让网页越来越复杂。此时还没有模块化的概念。幸运的是接触了织梦后,学会了什么叫代码复用。 总之,我是很喜欢偷懒,但最终都是实现了提高效率的目的。
我一直等着我已经完全掌握了建站的所有技巧,可以用其快速的变现后。 我可以去追逐我的动画梦想。万万没想到,建站这个领域,技术革新如此的快,html5的快速发展,市面上传播者flsh消亡的各种讯息。 我的梦想还没有追逐就殒灭了。 而我却阴差阳错的走在了潮流的方向,从来不愁工作,工资也是水涨船高,同时工作强度和复杂度也是指数提升。每天,奔波在各大浏览器解决兼容问题,用js去创造各种特效,还要时刻关注着各种新技术。 幸运的是,每个技术的产生,都在不断的提升生产力。但是建站的难度和复杂度确也是指数的提升。
在jquery的前后端分离时代,各种模版技术带领我们快速组建页面,建站的难度在业务逻辑的调试,复杂的交互,频繁的DOM操作上。于是,backbone这样的工具产生,前端从此也可以用到MVC,也有了初步的架构思维。
随着nodejs的横空出世,前端模块化的概念孕育而出,这个当然可以看做是代码复用,作用可远远不止于此。
早起的模块还只是一群函数的集合而已,工程师们立马发现了弊端,于是有了对象方式的模块,以及立即执行的函数来定义模块。 有了模块自然就有了规范,nodejs用CommonJS来同步加载模块,前端用AMD 或者CMD来异步加载模块。此时,网站是越来越复杂。
如今已经是es6+的时代,后端还是用CommonJS规范来定义和加载模块,前端用export来导出模块,再用import加载模块,最后还需要用webpack,babel等工具来将复杂的一个js工程生成一个js bundle。
而此时,还是前后端分离的时代。 后端只要启动一个服务去加载一个带id的div,剩下来的就都交给了js来渲染页面,完成交互,让用户走完完整的业务,比如购物,比如发帖评论,等等。
由于页面的复杂度,导致页面加载过长,页面出现长时间的白屏。前端们的视线从前端转向了后端。我们用nodejs来完成服务端的页面渲染,也就是Client + Service MVC。
大厂们纷纷推出了自己的同构方案, 比如阿里的egg。 谷歌的angular universal等。
从此建站多了一个选择SSR。 前后端终于又合并了。 但是这次的合并, 没有JAVA等后端语言, 他们还是和前端分离的。
SSR的思路,是让nodejs来做应用网关,JAVA等还是提供着接口,只需要提供接口即可。
那么问题来了,做了这么多年的前端,虽然前端也有模块化的思路,但是这最多的目的还是为了代码的复用而已。 如何构建一个后端应用呢,架构怎么弄?
nestjs可以完美的解决架构的问题。 可以说,你可以不用太懂架构,你只要能学会nest,你就已经掌握了架构。也可以说,如果你熟悉angular,你已经拥有了架构思维。
你可以用exception filter去做异常处理,用pipe去验证请求参数,或者用interface去定义参数,或者用interceptor去拦截xhr,然后给每一个xhr的headers加上一些如token等数据。
不用创建一个node服务专门用来提供接口服务,ssr上发出的请求,都不会出现在Network上,因为只是调用本地(服务器)上的服务而已,并不是一个XHR。 当你的网站减少了XHR的请求,网站的性能还不会提高吗?
同时,这个SSR服务,还是可以创见GraphQL提供给native,小程序,等等。
SSR将会让应用的体验更好,让开发者们提高生产力,早早完成任务,不再996。
ps:
一口气写完的,很多内容的正确性没有去检查,完全基于我的记忆。
欢迎指导,发文的初衷只是想说一声, 我正式成为了自由职业者,目前在找一个远程工作的机会,或者一个一起创业的机会。
我觉得「此合非彼合」,以前前后端一起搞是因为没有「拆分」出来前端、后端的概念,现在的全栈工程师其实是一种新的职位。拆分之后,人们的选择变得更多了,可以专精前端、后端或者干脆直接全栈。
前后端分离后,我觉得也或多或少的促进了“大前端”(原生+HTML5+各种小程序)的思潮。表示层的统一我觉得是一种进步。
##大小写不一致有点难受
前后端分离其实和业界的分层处理的趋势一样,让对的人做对的事,面向契约合作