基于NodeJS的全栈式开发庞国明

最开始组内讨论的过程中我发现,每个人对前后端分离的理解不一样,为了保证能在同一个频道讨论,先就什么是”前后端分离”达成一致。

大家一致认同的前后端分离的例子就是SPA(Single-pageapplication),所有用到的展现数据都是后端通过异步接口(AJAX/JSONP)的方式提供的,前端只管展现。

从某种意义上来说,SPA确实做到了前后端分离,但这种方式存在两个问题:

WEB服务中,SPA类占的比例很少。很多场景下还有同步/同步+异步混合的模式,SPA不能作为一种通用的解决方案。

现阶段的SPA开发模式,接口通常是按照展现逻辑来提供的,有时候为了提高效率,后端会帮我们处理一些展现逻辑,这就意味着后端还是涉足了View层的工作,不是真正的前后端分离。

前端:负责View和Controller层。

后端:只负责Model层,业务处理/数据等。

为什么去做这种职责的划分,后面会继续探讨。

二、为什么要前后端分离?

2.1现有开发模式的适用场景

比如后端为主的MVC,做一些同步展现的业务效率很高,但是遇到同步异步结合的页面,与后端开发沟通起来就会比较麻烦。

2.2前后端职责不清

在业务逻辑复杂的系统里,我们最怕维护前后端混杂在一起的代码,因为没有约束,M-V-C每一层都可能出现别的层的代码,日积月累,完全没有维护性可言。

虽然前后端分离没办法完全解决这种问题,但是可以大大缓解。因为从物理层次上保证了你不可能这么做。

2.3开发效率问题

所以我们的开发模式依然是,前端写好静态demo,后端翻译成VM模版,这种模式的问题就不说了,被吐槽了很久。

直接基于后端环境开发也很痛苦,配置安装使用都很麻烦。为了解决这个问题,我们发明了各种工具,比如VMarket,但是前端还是要写VM,而且依赖后端数据,效率依然不高。

2.4对前端发挥的局限

性能优化如果只在前端做空间非常有限,于是我们经常需要后端合作才能碰撞出火花,但由于后端框架限制,我们很难使用Comet、Bigpipe等技术方案来优化性能。

为了解决以上提到的一些问题,我们进行了很多尝试,开发了各种工具,但始终没有太多起色,主要是因为我们只能在后端给我们划分的那一小块空间去发挥。只有真正做到前后端分离,我们才能彻底解决以上问题。

三、怎么做前后端分离?

怎么做前后端分离,其实第一节中已经有了答案:

后端:负责Model层,业务处理/数据等。

试想一下,如果前端掌握了Controller,我们可以做urldesign,我们可以根据场景决定在服务端同步渲染,还是根据view层数据输出json数据,我们还可以根据表现层需求很容易的做Bigpipe,Comet,Socket等等,完全是需求决定使用方式。

3.1基于NodeJS“全栈”式开发

如果想实现上图的分层,就必然需要一种web服务帮我们实现以前后端做的事情,于是就有了标题提到的“基于NodeJS的全栈式开发”

这张图看起来简单而且很好理解,但没尝试过,会有很多疑问。

SPA模式中,后端已供了所需的数据接口,view前端已经可以控制,为什么要多加NodeJS这一层?

多加一层,性能怎么样?

多加一层,前端的工作量是不是增加了?

多加一层就多一层风险,怎么破?

NodeJS什么都能做,为什么还要JAVA?

这些问题要说清楚不容易,下面说下我的认识过程。

3.2为什么要增加一层NodeJS?

现阶段我们主要以后端MVC的模式进行开发,这种模式严重阻碍了前端开发效率,也让后端不能专注于业务开发。

解决方案是让前端能控制Controller层,但是如果在现有技术体系下很难做到,因为不可能让所有前端都学java,安装后端的开发环境,写VM。

NodeJS就能很好的解决这个问题,我们无需学习一门新的语言,就能做到以前开发帮我们做的事情,一切都显得那么自然。

3.3性能问题

分层就涉及每层之间的通讯,肯定会有一定的性能损耗。但是合理的分层能让职责清晰、也方便协作,会大大提高开发效率。分层带来的损失,一定能在其他方面的收益弥补回来。

举个例子:

淘宝宝贝详情页静态化之后,还是有不少需要实时获取的信息,比如物流、促销等等,因为这些信息在不同业务系统中,所以需要前端发送5,6个异步请求来回填这些内容。

有了NodeJS之后,前端可以在NodeJS中去代理这5个异步请求,还能很容易的做Bigpipe,这块的优化能让整个渲染效率提升很多。

3.4前端的工作量是否增加了?

所以,虽然工作量会增加一点,但是总体开发效率会提升很多。

3.5增加Node层带来的风险怎么控制?

随着Node大规模使用,系统/运维/安全部门的同学也一定会加入到基础建设中,他们会帮助我们去完善各个环节可能出现的问题,保障系的稳定性。

3.6Node什么都能做,为什么还要JAVA?

我们的初衷是做前后端分离,如果考虑这个问题就有点违背我们的初衷了。即使用Node替代Java,我们也没办法保证不出现今天遇到的种种问题,比如职责不清。我们的目的是分层开发,专业的人,专注做专业的事。基于JAVA的基础架构已经非常强大而且稳定,而且更适合做现在架构的事情。

四、淘宝基于Node的前后端分离

上图是我理解的淘宝基于Node的前后端分离分层,以及Node的职责范围。简单解释下:

最上端是服务端,就是我们常说的后端。后端对于我们来说,就是一个接口的集合,服务端提供各种各样的接口供我们使用。因为有Node层,也不用局限是什么形式的服务。对于后端开发来说,他们只用关心业务代码的接口实现。

服务端下面是Node应用。

Node层还能轻松实现原来vmcommon,tms(引用淘宝内容管理系统)等需求。

Node层要使用什么框架由开发者自己决定。不过推荐使用express+xTemplate的组合,xTemplate能做到前后端公用。

怎么用Node大家自己决定,但是令人兴奋的是,我们终于可以使用Node轻松实现我们想要的输出方式:JSON/JSONP/RESTful/HTML/BigPipe/Comet/Socket/同步、异步,想怎么整就怎么整,完全根据你的场景决定。

浏览器层在我们这个架构中没有变化,也不希望因为引入Node改变你以前在浏览器中开发的认知。

引入Node,只是把本该就前端控制的部分交由前端掌控。

这种模式我们已经有两个项目在开发中,虽然还没上线,但是无论是在开发效率,还是在性能优化方面,我们都已经尝到了甜头。

五、我们还需要要做什么?

最佳开发实践

线上成功案例

大家对Node前后端分离概念的认识

安全

性能

技术上不会有太多需要去创新和研究的,已经有非常多现成的积累。其实关键是一些流程的打通和通用解决方案的积累,相信随着更多的项目实践,这块慢慢会变成一个稳定的流程。

六、“中途岛”

虽然“基于NodeJS的全栈式开发”模式很让人兴奋,但是把基于Node的全栈开发变成一个稳定,让大家都能接受的东西还有很多路要走,我们正在进行的“中途岛”项目就是为了解决这个问题。虽然我们起步不久,但是离目标已经越来越近!

THE END
1.属于软件生存期成长期阶段的是什么最后,需要注意的是,在成长期阶段,软件开发团队需要保持持续的创新和活力。创新是推动软件产品不断成长和发展的关键因素,只有持续地进行创新和改进,才能在市场竞争中保持领先地位。综上所述,软件生存期成长期阶段是软件产品逐渐得到市场认可和需求的阶段,需要软件开发团队持续地进行优化和升级,与其他相关行业合作交流,关注https://localsite.baidu.com/article-detail.html?articleId=9742560&ucid=n1D4rHDvrjT&categoryLv1=%E6%95%99%E8%82%B2%E5%9F%B9%E8%AE%AD&ch=54&srcid=10004
2.什么算是嵌入式全栈?腾讯云开发者社区走到这一步,基本就是嵌入式全栈了,上位机可以是自己开发,也可以由计算机的人去开发。 有了这些基础,你才可以像华为天才少年“稚晖君”一样,自己DIY硬件,自己DIY软件,自己从零做出一个东西来。当自己软硬件都懂的时候,你写代码就会非常踏实,而不会有空中楼阁的感觉。 https://cloud.tencent.com/developer/article/1829377
3.全栈开发工程师和嵌入式开发工程师有什么区别【任职资格】1.男女不限,大专及以上毕业;2.精通C/C++程序设计;3.有嵌入式系统8位、32位单片机软件开发经验或者是有一种或多种嵌入式操作系统应用程序开发经验者;4.有4G无线数据通信开发经验者优先;5.具有独立工作的能力,善于和他人合作,具有1年(包含1年)以上相关工作以上;6.具有严密的逻辑思维,踏实的工作态度https://www.jobui.com/gangwei/pk/quanzhankaifagongchengshi-qianrushikaifagongchengshi/
4.11种类型的开发工程师(你会是哪一种?)尽管如此,掌握所有级别的网络开发似乎也有其回报。StackOverflow在2022年对开发者进行的一项调查发现,当受访者被要求描述他们的角色时,”全栈开发者 “是最高的回答(近47%)。 2022年不同类型开发者占比 (via:StackOverflow) WordPress开发者是全栈式开发者吗? https://www.wbolt.com/types-of-developers.html
5.「什么是全栈工程师(嵌入式Linux+Web开发)」红贝电子2024年全栈2、一年及以上嵌入式开发经验,有实际应用项目经验。 3、熟悉C语言及嵌入式linux应用开发,有linux内核编程经验优先。 4、熟悉HTML、HTML5、CSS、JQ、JS、基础PHP,熟悉HTTP、TCP等协议交互,有安卓APP开发经验的优先,有web服务器联调经验优先。 赖先生2月内活跃 https://www.zhipin.com/job_detail/18406a8383903d0d0HJ43d28F1I~.html
6.全栈式微信小程序云开发实战.pdf孙芳梁大业林彬移动开发人才培养系列丛书全栈式微信小程序云开发实战CIoudBasePracticeofFullStackMiniPrograms孙芳梁大业林彬主编○从基础到应用,,从理论到实战全面介绍全栈式微信小程序及云开发技术》全书案例丰富,且综合案例由业界资深架构师编写利于读者快速入门和实战○提供丰富的教学资源,包括教学课件、案例源代码:习题解答回·中国工信https://max.book118.com/html/2021/1129/5004233343004123.shtm
7.我的前端之路:工具化与工程化Web前端组织架构上的分离,由早期的服务端开发人员顺手去写个界面转变为完整的前端团队构建工程化的前端架构。 前后端分离本质上是前端与后端适用不同的技术选型与项目架构,不过二者很多思想上也是可以融会贯通,譬如无论是响应式编程还是函数式编程等等思想在前后端皆有体现。而全栈则无论从技术还是组织架构的划分上似乎又回到https://www.iteye.com/news/32054
8.Java开发全栈知识体系架构学习(服务器微服务数据库思维导2021年从入门到精通java开发全栈知识体系架构学习总结知识脑图(学习使用于项目实战)前端、后台、服务器、Linux、性能优化、集群搭建、微服务、大数据、项目实战等内容https://www.processon.com/view/60504b5ff346fb348a93b4fa
9.“全栈这个概念坑害了多少开发者全栈的定义是什么?度娘给出的答案是: 全栈工程师,也叫全端工程师,英文Full Stack developer。是指掌握多种技能,并能利用多种技能独立完成产品的人。 相信很多人不认同此观念,但是不得不说,绝大多数的开发者都以此为目标。近段时间在工作中,频繁的与同事聊到这个话题,也让我深思了一下。 https://blog.csdn.net/yzzst/article/details/51645214
10.Web全栈工程师是什么1、全栈开发工程师的概念 全栈工程师,也叫全端工程师(同时具备前端和后台能力),英文Full Stack developer。是指掌握多种技能,并能利用多种技能独立完成产品的人。形象的打个比方来说:全栈工程师就是一个能独立盖一幢10层小洋楼的人,而普通工程师,则是可以和一群人盖一幢摩天大楼的人。 https://www.elecfans.com/d/860000.html
11.Vue:渐进式框架,自底向上构建用户界面的绝佳选择全栈模式相对于JSP模式来说,看上去是一种倒退,也确实是对原有开发模式的回归,但是是一种螺旋式的回归。 全栈模式依然面临诸多挑战: ●前端需要对服务器端编程有较深入的了解,例如TCP/IP等网络知识。 ● Java层与服务器端的高效通信,这种模式下HTTP通信可能效率不高,通过SOAP等方式通信效率更高,一切都需要验证。 https://m.bjhwtx.com/h-nd-258807.html
12.什么是全栈开发工程师什么是全栈开发工程师?简单来说,全栈开发工程师就是一种掌握各种技能并使用这些技能,能够独立完成产品的人。他可以处理数据库,服务器,系统工程和客户端的所有工作。可以根据项目,客户需要的,完成移动堆栈,Web堆栈或本机应用程序堆栈。 一个全栈开发工程师是需要掌握.PC、H5、Nodejs、小程序、移动端技术栈、Vue/Reacthttps://www.hxsd.com/content/27273/
13.浅谈全栈式测试开发1)测试岗位的最高需求 岗位:全栈测试开发工程师 级别:专家 2)测试岗位的发展转变 传统手工测试 -> 现代测试开发,本质是市场对测试人员的能力不断提高的必然诉求,其强调要https://www.jianshu.com/p/3d2a3d18c640
14.MMORPG全栈式网络游戏开发之旅本课程的主要学习内容是如何使用ET框架(在GitHub上有着极高人气的基于.Net的跨平台、开源、高性能、全栈式开发与多进程分布式部署的网络游戏开发框架)进行MMORPG网络游戏项目的开发实战的学习。 购 课 福 利 活动期间,凡购买UWA学堂《【E世界】MMORPG全栈式网络游戏开https://mp.weixin.qq.com/s?__biz=MzI3MzA2MzE5Nw==&mid=2668929490&idx=2&sn=1f6c5f962645827172ac2bff51b618b0&chksm=f1c90da0c6be84b67ff16c10425560c65e1516355539aa46f5259fe87db4d3310c343006cc7f&scene=27
15.《全栈式微信小程序云开发实战》简介书评在线阅读当当人民邮电出版社官方旗舰店在线销售正版《全栈式微信小程序云开发实战》。最新《全栈式微信小程序云开发实战》简介、书评、试读、价格、图片等相关信息,尽在DangDang.com,网购《全栈式微信小程序云开发实战》,就上当当人民邮电出版社官方旗舰店。http://product.dangdang.com/630308182.html
16.国家重点研发计划“全栈式工况催化模拟计算与智能设计软件包该项目由中国科学院上海高等研究院牵头,联合山东大学、南京大学、浙江大学和上海超级计算中心等优势单位承担。项目将针对传统静态的构效关系无法实现催化剂动态调控和设计的重大科学问题,通过将原位谱/显微学表征方法与理论模拟及人工智能耦合,开发全栈式工况催化模拟计算与智能设计软件包,实现工况反应条件与理论模拟耦合。http://www.sari.cas.cn/xwdt/kydt/202403/t20240318_7037865.html
17.全栈式整车热管理试验台助力新能源汽车热管理系统开发为了满足主机厂新能源整车热管理开发与测试的需求,专业从事测试、测量、测控的系统集成企业北京中盛新能科技有限公司(以下简称中盛新能)开发出整车热管理全栈式试验台架解决方案,助力主机厂高效高质低成本的开展热管理系统开发。 整车热管理研发试验的挑战 1、 鉴于新能源车热管理日趋复杂,包括功能耦合复杂、整车交互复杂https://www.eefocus.com/article/1644993.html