众所周知,我们在开始任何Web或移动应用项目的开发之前,都需要事先选择好最适合项目的主要实现技术。目前,可选择的技术栈可谓林林总总,归纳起来,包括全栈(Full-Stack)、均(MEAN)栈和MERN栈三大类。下面,我将逐一和您讨论这些术语背后相关技术的优缺点,以方便您做出明智的选择。
到底什么是技术栈?
作为一种数据类型,技术栈实际上是一些组件的集合。它具有两个主要功能。一个是以推送的形式,向集合中添加组件;另一个是以弹窗的方式,删除最近添加的,但尚未删除的组件。可见,它有点类似一个堆叠了一组实用工具的架子(栈),您可以轻松地从其顶部拉出需要的工具和技术。下面是技术栈中的常见技术:
前端技术-HTML、JavaScript、CSS、PostgreSQL、jQuery;前端框架-Angular.js、Polymer.js、bonebjs、Ember.js;后端技术-Nodejs,PHP、.NET、RubyonRails;后端框架-ASP.NET、Rails、Express、CodeIgniter;数据库技术-Oracle、MicrosoftSQLServer、MySQL、MongoDB。针对不同的业务场景,我们可以采用全栈(Full-Stack)、均(MEAN)栈和MERN栈三种方式。下面我们来详细讨论三者各自的特点:
全栈的相关概念
作为Web开发的一部分,全栈开发泛指通过互联网或内联网,进行各种Web相关任务的开发,其中包括应用程序前端(我们也称为客户端)和后端(我们也称为服务器端)等完整的开发。而凭借着云计算所带来的各项技术优势,全栈开发给整个开发领域带来了翻天覆地的变化。
全栈工程师同时在客户端和服务器端软件上,运用完整的技术栈开展开发工作,其中涉及到各种前端技术、后端开发语言、数据库、服务器、API、以及版本控制系统。这样也就是所谓“全栈”名称的由来。
全栈开发人员既可以保持目标系统的各个部分平稳运行,又可以为团队中的每个成员提供帮助,并大幅减少团队用于沟通的时间和技术成本。毕竟,这样一个“万金油”式的角色,能够为公司节省在人力、基础架构和运营上的各项成本。
全栈开发需具备的专业知识
1)前端技术
全栈开发人员应该掌握诸如HTML5、CSS3、JavaScript之类重要的前端技术,并对jQuery、LESS、Angular和ReactJS等第三方库有所了解。
2)开发语言
全栈工程师应该至少知道一种服务器端编程语言,例如:Java、Python、Ruby、以及.Net等。
3)数据库和缓存
对各种DBMS技术的了解,是对全栈开发人员的另一项重要要求。其中,数据库包括:MySQL、MongoDB、Oracle、以及SQLServer等场景数据库。而诸如varnish、Memcached和Redis之类的缓存机制也是必备的知识。
4)基本设计能力
作为一名全栈开发人员,除了必备的设计知识,还需要了解UI/UX方面的基本设计理念。
5)服务器
由于需要接触到Apache或Nginx服务器,因此全栈开发人员如果具备Linux的良好背景,则能够轻松地管理各种服务器。
6)版本控制系统(VCS)
版本控制系统能够方便全栈开发人员跟踪代码库中的所有更改。通过Git的相关知识,他们能够了解如何获取最新的代码,更新部分代码,以及在不破坏其他开发人员代码的情况下进行修改。
全栈的优势
1、切换简单
全栈开发人员具有根据项目的需求,在前端和后端开发之间进行自由切换的能力。
2、整体设计架构
全栈开发人员的显著特征之一便是:他们不仅能够从事Web开发,而且能够负责整个设计的架构。
3、节约成本
分别雇用前端和后端开发人员的成本,比起仅聘请前后端全能的全栈开发人员来说,显然要高出许多。
4、易于掌控设计和实施的各个状态
由于更加全面地拥有设计上的所有权,因此全栈开发人员能够更加自如地实施各项构建流程。
5、易于技术更新
与那些仅从事前端或后端技术的人员相比,全栈开发人员拥有更全面的知识结构,因此他们有实力轻松地升级或切换到新的技术和工具上。
均栈的相关概念
均栈使用MongoDB、ExpressJs、Angular和NodeJs(抬头字母简称MEAN),来分析和理解Web开发活动中的动态性和复杂性。对于大多数开发人员而言,他们在全栈设计中往往会采用MEAN技术,来专注于各项功能的易用性。
正如前面提到的,组成均栈的四项技术分别是:作为数据库的MongoDB,作为服务器系统的Express,针对前端的Angular,以及作为JavaScript服务器端事件驱动的I/O(输入/输出)环境--NodeJ。
均栈的关键特征是:所有这四种技术均基于框架中的Javascript和JSON(JavaScriptObjectNotation,对象表示法)数据,进而节省了消耗在潜在JSON编码上的时间。
MEAN前端
Angular是由Google创建和维护的开源JavaScript框架。它带有管理客户端上所有应用与交互的功能,并主要用于构建在网页上加载初始请求的SPA(SinglePageApplication,单页面应用程序)。
通过执行客户端的侧路由(siderouting),Angular能够大幅减轻服务器的负载。同时,由于它属于MVW(ModelViewWhatever,不限模型与视图)型架构,因此均栈的前端部分(Angular)可由HTML、CSS或Javascript组成。
MEAN后端
MEAN后端用于设计表格与文档的后端,通过其服务来存储前端的数据,以及可以使用主键/外键来检索数据库的结构。
由于均栈里各种工具都可以在本地使用底层的JSON数据,因此Node+Express.js+MongoDB数据库的结合,为基于JSON的Web服务提供了出色的实现效果。可见,相对于前面提到的全栈,均栈开发服务具有效率和生产率上的优势。
均栈的优势
均栈的主要优点是通过开源的方式,方便开发人员去使用互联网上免费提供的模块、库和公共存储库。
由于均栈中是通过庞大的库中提供多种JavaScript模块,因此用户能够轻松地使用Node.js来开发Web应用。均栈非常灵活,您可以添加更多仅用作开发Web应用平台的对象。如果需要在开发后测试软件应用,您可以使用MEAN将应用程序托管在云端。此外,它也提供了横跨服务器的自动共享和集群支持。由于Node.js包含了大量可以被直接用于开发Web应用的模块库,因此您可以通过均栈来节省大量的时间。易于在客户端和服务器之间切换。由于Node.js是一种通用语言,可以让您轻松地在客户端和服务器端之间进行控制,因此您无需Apache之类的第三方服务器,便可打开应用程序。作为一个开源的JavaScript框架,Angular.js提供了可维护、可重用和可测试性。而得益于非阻塞的架构,Node.js也具有快速且可扩展的特性。可见,各项MEAN技术都具有高性能与高可用性。MERN栈的相关概念
除了将React代替了Angular,MERN栈几乎与均栈如出一辙。MERN栈也是由开源组件所组成,并提供了一个端到端框架,用来构建全面的Web应用,并让浏览器能与数据库相连接。
在介绍MERN栈之前,我们首先来了解一下ReactJs。React是由Facebook的Ads组织开发,使用的是典型的客户端MVC模型。该模型具有所有常见的双向数据绑定和模板。视图会持续侦听模型中的更改,而作为更改的响应,视图会自行更新。
不过,随着应用程序变得越来越复杂,而用于更新视图的代码也会存在着细微差异,因此这类级联更新(Cascadingupdates)已变得难以维护。这也正是需要用声明性(declarative)构建,来取代命令性(imperative)的原因。
MERN栈的优势
1、JavaScript无处不在
MERN的最大优势是:统一使用了JavaScript语言。我们可以将JavaScript用于客户端和服务器端代码,甚至可以用它来编写MongoDB的数据库脚本。因此,您唯一需要了解和熟悉的语言便是JavaScript。
2、JSON无处不在
在使用MERN栈时,您会发现在数据库中、在应用服务器中、在客户端上、甚至在线路上,任何地方都会使用JSON作为对象的表示形式。
3、Node.js性能
鉴于其事件驱动的架构和无阻塞的I/O特点,Node.js在此成为了一种非常快速和灵活的Web服务器。
4、NPM生态系统
NERN栈提供了大量可供人们免费使用的npm软件包。即便它们无法完全满足您的需求,您也可以通过对其fork,来制作出属于自己的npm软件包。
小结
基于上述介绍,想必您已经能够根据自己手头项目的实践情况,明智地选择出该用全栈(Full-Stack)、均(MEAN)栈还是MERN栈了。当然,作为技术储备和默认情况,我还是建议您雇用全栈开发人员,以满足不同应用场景的开发需求。