[转]Node.js给前端带来了什么

转载自:http://www.w3ctech.com/topic/37前端

原 文: https://www.nczonline.net/blog/2013/10/07/node-js-and-the-new-web-front-end/node

在软件开发领域,前端工程师曾经是一个比较纠结的职业。在Web技术真正发展起来以前的至关长一段时间里,因为技术门槛很低,前端工程师行业一直是鱼龙混杂的状态。其中不少号称是Web开发者的人实际上并无什么专业的前端技能,有些工做就是被当作简单的力气活由美术设计师顺便作作而已。当时不少人甚至并不认为有朝一日会有这么一群人用HTML、CSS和JavaScript这三门技术谋生 --- 他们想,这怎么可能呢 --- 这些技术看起来都是如此简单,随随便便混在一块儿用就哦了,把作这些活当作一种正儿八经的职业简直是笑话。程序员

随着技术发展,JavaScript这门语言在悄然改变人们对前端工做的见解,让一些人从美工页面仔转变为真正的前端工程师。JavaScript,这门不少工程师曾经把它当作玩具而不屑一顾的脚本语言居然演变成了推进互联网发展的核心驱动力。伴随着愈来愈多的浏览器的出现使得用HTML和CSS兼容各类浏览器变得愈来愈难,因而能实现兼容各类浏览器的页面成为了前端工程师的金字招牌,前端职业开始变得煊赫一时。web

两个独立的UI层

即便Ajax这种技术风靡全球以后,前端工程师的主要工做也都是局限于浏览器窗口以内的。HTML、CSS和JavaScript是前端工程师必需要掌握的三种核心技术,前端同后端的惟一交集仅仅是前端须要确保后端的数据可以以正确合适的格式输出到浏览器上。在某种意义上来讲,Web开发有两个UI层,一个是在浏览器里面咱们最终看到的,另外一个在server端,负责生成和拼接页面。由于传统前端基本上没有办法自主决定server端如何处理数据拼接生成页面,由于数据如何组织,每每是会受到后端工程师所选择的技术框架的影响的,然后端不理解前端的一些需求因此他们选择的时候也就不多会从前端方便的角度进行考虑。后端

two_ui

在上面这张图的结构里,浏览器里的UI层是彻底归前端工程师管的。服务器端的UI层则是先后端都关心的部分,剩下的部分则是服务端的底层,诸如数据处理、缓存、权限控制和其余核心模块,这些是归后端管的。咱们仍是回过头来看咱们所关心的server端UI层吧,这一层所作的事情一般是拼页面模板以及处理具体的业务交互逻辑。浏览器

因此,传统的先后端分工是由前端负责浏览器,而其余浏览器以外的东东通通归由后端负责。先后端的交集server的UI层也是由后端来主导的。这是目前最主流的一种先后端分工方式缓存

Node.js带来的改变

Node.js一发布,马上在前端工程师中引发了轩然大波,前端工程师们几乎马上对这一项技术表露出了至关大的热情和期待。上一次一种技术能被整个前端界如此关注那仍是在几年以前,那时候Ajax这个概念刚刚被提出来。让JavaScript跑在server端,这个想法简直太棒了。这下咱们不用再去学那些什么PHP啦、Ruby啦、Java啦、Scala啦或者其余什么对前端来讲奇怪的语言,也能够轻松地将咱们的领域扩展到server端,多么美好的前景!安全

我历来不是一个PHP的爱好者,可是我在Yahoo工做的时候,我不得不使用PHP。为了这份工做,我得忍受花费许多额外的时间去修复因为PHP的傻逼特性致使的坑。对于一直使用Java做为服务端语言的我来讲,对PHP实在是很难适应。我相信,也一直坚持认为一种静态类型的语言更加适合用来构建你的业务逻辑的核心部分。所以,虽然我很喜欢JavaScript,但我也不会用它来作全部的事情,好比我绝对不会只用JavaScript来实现一个完整的购物车系统。服务器

对于我来讲,Node.js不是一个解决一切问题的银弹,我不会用它来取代server端全部别的语言模块。事实上,Node.js能够作到其余后端语言所能作到的几乎全部的事情,可是我不会这么作。我所认为的比较合适的作法是用Node.js来解决server端UI层的问题,这样我就能够将这一层从后端的其余部分剥离开来。前端工程师

new_two_ui

如今愈来愈多的公司倾向于采用面向服务(service-oriented)的架构,由后端提供给前端RESTful的接口,这么作是为了更好的作先后端的依赖分离。若是全部的关键业务逻辑都封装成REST调用,就意味着在上层只须要考虑如何用这些REST接口构建具体的应用。那些后端程序员们根本不操心具体数据是如何从一个页面传递到另外一个页面的,他们也不用管用户数据更新是经过Ajax异步获取的仍是经过刷新页面,固然他们更不关心的是你究竟在用jQuery仍是YUI --- 这与他们根本毫无关系嘛。后端程序员真正应该关心的难道不该该是数据如何存储、如何容错以及如何保证安全性吗?

如今咱们看看Node.js带来的好处吧,当后端程序员提供了REST服务以后,如今咱们前端程序员可使用Node.js来处理server端的UI层啦,咱们能够将经过REST调用拿到的数据为所欲为地进行处理,无论是渲染模板仍是直接提供给Ajax,如今咱们仅仅用JavaScript一种语言就能够轻松实现这些。至于后端程序员,他们只须要保证数据的正确性,不管他们使用任何一种语言来封装REST调用,都不会对前端形成影响,这样先后端的职责不就被更好地划分了吗?这样分工以后前端的领域就从浏览器小框框里面扩展到了server的UI层,而这一层原本对于后端来讲是一件他们作起来不轻松的零碎活儿。

不!这太耸人听闻了!

前端工程师接手以前一直由后端负责的这部分工做不那么容易被后端工程师们理解和接受。尤为是如今还有不少后端工程师认为JavaScript是一种极简单的“玩具语言”,他们将会想如此重要的服务端工做怎么能交给这群看起来不靠谱的人用如此“不严肃”的语言来玩?在个人经验里,这种观念上的冲突是先后端工程师们在是否引入Node.js这一问题上的最大分歧。Server端UI层是先后端的中间地带,而以前一般后端程序员对于这个地带比较有主导权,因此一旦你进入这个原本属于后端主导的领域,争议天然是不可避免的。

实际上放弃传统的角色立场,将server的UI层分给前端,在大型Web架构下是颇有意义的。不这么作的话,有时候前端想要从后端要到正确的数据,还不得不关心后端到底是用什么语言实现的。过去的分工中,那些本来属于核心业务底层考虑的东西会被暴露给server的UI层,而这些问题每每会不当心影响到前端。前端原本不须要关注这些问题,由于先后端所关心的方面根本彻底不同嘛。若是你理解单一职能、责任分离和模块化,你就会理解我所说的,甚至会以为之前不把server的UI层分给前端实在是很笨。

只惋惜,以前Node.js这样的东东不存在,因此当时没有前端合适的技术让前端工程师们本身搞定server的UI层。因此后端的同窗们用PHP的人就顺手把UI用PHP的模板实现了,一样的用Java的后端同窗也天然而然地用JSP搞定这个问题。这不是前端的同窗不肯意去作server的UI,而是由于在以前,没有一种咱们熟悉的技术让咱们可以搞定这些事情,可是如今不同了,咱们有Node.js了。

结论

我喜欢Node.js,我喜欢由这项技术给前端界带来的更大的发展潜力。我并不认为整个后端彻底用Node.js来实现会是一个很好的方案,尽管Node.js彻底能够作到这一切。我认为目前Node.js最大的价值是能让前端彻底把控整个UI层,不管是浏览器的仍是Server端的,作到这一点,咱们工做的效率能获得很大的提高。咱们前端更擅长于决定数据以何种方式呈现能带给用户更好的体验,然后端则更加了解如何处理数据。在这种新的分工方式下,后端只须要提供合适的数据操做接口,前端本身就能构建漂亮的、有效率的、可用性高的接口,从而实现用户所喜欢的交互。

使用Node.js来搞定server的UI层也将后端工程师从他们不擅长的领域解放了出来。因而咱们获得了一个Web开发的灵丹妙药:先后端之间只须要经过数据来交互,这种模型使得两方相互独立,各自都可以快速迭代开发,而只要保证数据接口不变,先后端彼此之间就不会形成任何影响。

果断尝试一下吧,这个方案也许正适合你的团队。


博客地址:http://wangyh.net

相关文章
相关标签/搜索