思想和实践的Nodejs之前和基于分离结束后(一)全栈开发
前言为了解决传统的Web开发模式带来的各种问题,我们进行了许多尝试,但由于身体差距的前端和后端的方案非常相似。痛定思痛,今天我们重新定义之前和前面的学生介绍结束后熟悉Nodejs,尝试前和结束后,探索一种新的分离模式。
随着不同终端的兴起,对开发者的要求也越来越高。纯浏览器的响应方式已经不能满足用户体验的高要求。对于不同的终端,往往需要开发定制的版本,为了提高开发效率,前端和终端的分离越来越受到重视。后端负责业务/数据接口,前端负责显示/交互逻辑。使用相同的数据接口,我们可以定制多个版本的开发。
这个话题已经讨论最近,阿里有些不也在做一些尝试。很长时间的讨论之后,我们的团队决定探索一套基于NodeJS的前端分离方案。在理解和思考的过程中有一些变化。在这里,我们也希望看到同学们参与讨论,帮助我们提高。
1。正面和背面的分开是什么
在小组讨论开始时,我发现每个人对前后两端的分离有不同的理解。为了确保我们能在同一个通道上讨论,我们首先就什么是前后端的分离达成一致意见。
我们都同意前端分离的例子是spa(单页应用程序)。通过异步接口提供了所有显示的数据(阿贾克斯 / JSONP),和前端显示。
从某种意义上说,SPA确实进行了前端分离,但有两个问题是这样的:
在web服务中,spa类的比例很小,在很多情况下,都有同步/异步+异步混合模式,SPA不能作为一种通用的解决方案。
在目前的SPA开发模式中,接口通常是根据显示逻辑提供的。有时,为了提高效率,后端将帮助我们处理一些表示逻辑,这意味着后端仍然参与视图层的工作,而不是真正的前端分离。
SPA类型的前后端是从物理层之间分离出来的(只要客户端是前端服务器就回来了),这种方法不能满足我们在分离结束前的需要,我们相信从职责划分到满足我们目前的使用场景:
前端:负责视图和控制器层。
后端:只负责模型层、业务处理/数据等。
为什么要做这项职责的划分,以后还会继续讨论。
两。为什么前面和后面要分开
在这个问题上,于波的文章中Web研发模型的演变是非常全面的。
2.1现有开发模式的适用场景
于波提到的一些发展模式有各种各样的适用场景,但没有一个完全取代另一个。
例如,后端的MVC是主要业务,所以做一些同步显示业务是有效的,但是与后端的开发通信更困难。
ajax主要是SPA开发模式,更适合开发APP类型场景,但它只适合APP,因为SEO等问题没有很好解决。对于许多类型的系统,这种开发方式也过于繁重。
2.2个末端和后面的职责不明确。
在复杂的业务逻辑系统中,我们最怕维护与前端和终端混合的代码。因为没有约束,把可能在各个层次都有其它层的代码,这是太长时间保持。
虽然前后分开不能完全解决这个问题,但它可以大大缓解,因为你不能从物质层面上做到这一点。
2.3发展效率问题
淘宝的网站基本上都是基于MVC框架WEBX,这决定了前端只能依赖于后端。
所以我们的开发模式还是,前端写静态演示,后端转换成VM模板,这个模式的问题不说了,已经吐了很长时间了。
这也是在后直接发展很痛苦结束的环境,和它的麻烦来配置和安装它。为了解决这个问题,我们发明了各种工具,如VMarket,但前端还有写VM,并依靠后端数据,效率仍然不高。
此外,后端还不能摆脱对报表的强烈关注,因此它的重点是业务逻辑层的开发。
2.4前端的限制
如果在前端空间的性能优化非常有限,我们常常需要与后端合作以与火花碰撞。然而,由于其后端框架的限制,这是我们用彗星优化性能难,BigPipe和其他技术解决方案。
为了解决上述问题,我们已经做了很多尝试开发各种工具,但是我们并没有取得很大的进展,因为主要原因是我们只能发挥我们在后端划分的小空间,只有真正进行前后分离,才能彻底解决上述问题。
三。如何进行前后分开
如何做到前后分开,其实第一节有答案:
前端:负责视图和控制器层。
后端:负责模型层、业务处理/数据等。
试想,如果前面的主控制器,我们可以做URL的设计,我们可以根据现场服务器或同步渲染决定,根据视图的数据输出的JSON数据,我们还可以根据表现层需求做BigPipe,彗星很容易,插座等,需求完全决定使用方式。
3.1全栈开发基于NodeJS
如果你想实现以上的层面,需要一个Web服务来帮助我们在做回实现的,所以会有一个完整的堆栈Nodejs开发基于标题提到的
它看起来简单明了,但人们对此有很多疑问。
在spa模式中,后端提供了所需的数据接口,并且视图前端可以被控制。你为什么把Nodejs层
演出怎么样
还有一层,前端的工作量增加了吗
还有一层风险,怎么破
Nodejs可以做任何事,你为什么要java
要清楚地回答这些问题是不容易的,下面是我理解的过程。
3.2你为什么想加入一层Nodejs
现阶段,我们主要开发MVC模式,严重阻碍了前端开发效率,后端不能专注于业务开发。
解决的办法是使前端控制器层控制,但它是很难在现有的技术体系实现的,因为所有的前端学习java是不可能的,安装后端的开发环境,编写虚拟机。
Nodejs可以很好的解决这个问题。我们不需要学习一门新语言,所以我们可以做我们以前做过的事情。一切似乎都很自然。
3.3性能问题
分层涉及各层之间的沟通,必须有一定的绩效损失,但合理的分层可以使责任明确,便于协作,从而大大提高开发效率,而分层造成的损失必须弥补其他方面的好处。
此外,一旦分层确定,我们可以通过优化通信和通信协议来减少损失。
例如 uff1a
在淘宝宝贝详情页面是静态的,仍有许多信息需要实时获取,如物流、促销等。因为这些信息在不同的业务系统中,所以前端需要发送5到6个异步请求来来回填充这些内容。
随着Nodejs,前端可以代表NodeJS 5的异步请求,也便于做BigPipe。这种优化可以大大提高渲染效率。
也许在PC上,你感觉不到5、6发送异步请求,但在无线端,在客户端建立一个HTTP请求是昂贵的手机。通过这种优化,性能提高了几倍。
淘宝的细节是基于NodeJS的优化,我们都在进步,我会分享优化过程中经在线。
3.4前端的工作量增加了吗
与只需裁剪页面/做演示相比,它必须稍微多一些。但在当前模式中,有链接和通信链接。这个过程花费了大量的时间,而且很容易获得bug,很难维护。
所以,虽然工作量会有所增加,但整体开发的效率会大大提高。
另外,测试的成本可以节省很多,以前开发的接口是针对性能层的,编写测试用例是困难的,如果前后两端分开,甚至测试也可以分开。用户可以专门测试接口,而一个人专注于测试UI(工作的一部分可以被工具替换)。
3.5如何增加节点层的风险
随着节点的大规模使用,系统运行维护部门的学生也将加入到基础设施建设中。它们将帮助我们改善每个环节可能出现的问题,确保系统的稳定性。
3.6节点可以做任何事,你为什么要java
我们的初衷是做前后分离,如果我们考虑这个问题,这有点违背了我们的初衷,采用节点而不是java,我们没有办法保证我们没有所有的问题,我们现在所拥有的,如缺乏责任感。我们目标是开发、专业化、职业化和专业化。基于java的基础设施是非常强大和稳定,更适合于目前的架构。
四、基于节点淘宝分离前后
上面的图片是基于分离和分层淘宝结-我的理解,以及对Node的职责范围。简单的解释:
顶端的服务器,即我们常说的后端,后端是一个接口,我们的服务器,我们提供了各种接口。因为有一个节点层,它不必局限于什么样的服务后台开发。,他们只关心业务代码的接口的实现。
下面的服务器是节点应用程序。
在节点应用程序中,有一个与服务器通信的模型代理层,这一层主要是一种平滑我们调用不同接口的方式,并封装视图层所需的一些模型。
节点层也可以轻松实现原vmcommon,TMS(参考淘宝的内容管理系统)和其他要求。
什么框架用于节点层是由开发商自己决定的。但是,建议结合使用快递+ XTemplate,及XTemplate可用于前端和后端。
你决定如何使用节点,但令人兴奋的是,我们终于可以使用节点很容易达到我们想要的方式输出: / / RESTful JSON JSONP / / / HTML BigPipe彗星 / /同步和异步套接字,想怎么整,完全按照你的现场决定。
浏览器层在我们的体系结构中没有改变,也不想改变您以前在浏览器中开发的知识,因为节点的引入。
节点的引入,前端只控制前端到前端的控制部分。
我们已经在这种模式下开发了两个项目,虽然尚未上线,但我们已经尝到了开发效率和性能优化方面的好处。
五。我们需要做什么
结合节点的发展过程分为现有的淘宝单片机程序。
基础设施建设,如会话、记录器等通用模块。
最佳开发实践
在线成功案例
人们对Node前后分离概念的理解
安全
性能
…
没有太多的技术需要创新和研究,也有很多现成的积累,关键是一些过程的积累和一般解决方案的积累。我相信随着更多项目的实践,这将慢慢成为一个稳定的过程。
六,中途岛
虽然基于协议栈的Nodejs开发模式是令人兴奋的,但完整的基于栈的节点上的发展进入了一个稳定的,让每个人都能接受的东西还有很多路要走,我们在中途岛的项目是解决这一问题。虽然我们开始不久,它越来越接近我们目标!