版权声明:更多文章请访问个人我的站 Keyon Y,转载请注明出处。
近期公司有个新项目,因为后端人手不足,我果断的提议用node中间层的方案,获得了老大的支持,因此一次大单尝试就来了。
Node中间层容许前端来作网站路由、页面渲染、SEO优化,对以往历来不接触这些内容的前端选手来讲,正是锻炼咱们网站架构的好机会。
另外,这也是一次深刻了解Node的好机会,准备好迎接即将到来的前端工程化时代。html
在说这个话题以前,先给你们分享一篇文章(【探索】NodeJS中间层搭建),它让我对node中间层的理解更加深入,特别是最后的来自淘宝的PPT。前端
玉伯提到的几种开发模式,各有各的适用场景,没有哪种彻底取代另一种。node
从职责上划分,node中间层实现了先后端分离:webpack
拿咱们公司来讲,以前的网站前台的项目,是基于后端的MVC,在遇到同步和异步结合的页面时候,和后端频繁沟通,对先后端来讲都是很痛苦的。git
对前端来讲,发挥的空间十分的有限,例如:性能优化,只在前端作是颇有限的,是须要和后端配合才能实现的,好比 随后的部分我会写道的无刷新加载。程序员
前端掌握了Controller,就能够作路由设计、网站目录结构、网站前端架构。
掌握了View,就能够经过后端模板引擎(jade/pug,Ejs,swig等),边写边绑数据。更别提,pug之流 还有mixin,让咱们对 html进行函数化,大大提升效率。 github
NodeJS让前端无需学习一门新的语言,就能作到这些事情。web
下面的这张图很简单形象的说明了Node中间层express
多加了一层通信,确定会有必定的性能损耗。但分层带来的损失,必定能在其余方面的收益弥补回来,并且合理的分层能让职责清晰、方便协做,大大提高开发效率。也能够经过优化通信方式和协议,尽量把损耗降到最低。segmentfault
拿我公司的网站举例:一个静态化的详情页面上有不少(动态)的数据,用户资料、评论信息、订单等等,须要五、6个异步请求,node中间层能够代理这些请求,轻松实现Bigpipe。
在PC上你以为发5,6个异步请求也没什么,可是在无线端,在客户手机上创建一个HTTP请求开销很大,有了这个优化,性能一下提高好几倍。
咱们的初衷是作先后端分离,若是考虑这个问题就有点违背咱们的初衷了。即便用Node替代Java/PHP,咱们也没办法保证不出现今天遇到的种种问题,好比职责不清。咱们的目的是分层开发,专业的人,专一作专业的事。基于JAVA/PHP的基础架构已经很是强大并且稳定,并且更适合作如今架构的事情。
常见的先后端分离的开发模式中,后端为前端提供了路由结构和页面的数据绑定,前端只须要切页面和少许的逻辑。
在node中间层中,前端不只仅要切页面和作页面逻辑,还要作url design、页面数据绑定、联调与沟通,还要考虑SEO的问题,伪静态页面、title/keyword设置、网站地图,甚至包括错误日志等等。
虽然前端的工做量增长了很多,可是基于模块化的开发,让整体的效率提高了。
对于后端程序员,接口整合的工做交给了前端服务器进行处理,同时和前端耦合度大大下降,工做量和工做效率都减小了。
另外,因为先后端分离,测试均可以分开来了,专门测试接口的和专门测试ui层。
我以为,之后基于NodeJs的全栈式开发的模式将会愈来愈流行,这也会引领前端步入工程化时代。可是要把Node全栈开发变成一个稳定的、方便的开发工具,还有不少路要走。此次公司的交易平台项目就是一个很好的实践,接下来,请继续关注我对这个项目的总结,但愿能给各位带来灵感。
欢迎继续关注本博的更新
Node中间层实践(一)——基于NodeJS的全栈式开发
Node中间层实践(二)——搭建项目框架
Node中间层实践(三)——webpack配置
Node中间层实践(四)——模板引擎pug
Node中间层实践(五)——express-中间层的逻辑处理