思想和实践的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开发模式是令人兴奋的,但完整的基于栈的节点上的发展进入了一个稳定的,让每个人都能接受的东西还有很多路要走,我们在中途岛的项目是解决这一问题。虽然我们开始不久,它越来越接近我们目标!