2017 nodeJS

1、版本迅速更新

Chrome瀏覽器已經蹦到57版本了,是名副其實的版本帝,做爲兄弟的Node.js也同樣,1.0以前等了6年,而從1.0到8.0,只用了2年時間,如今已到9以上了前端

咱們就數一下node

  • 從v0.1到0.12用了6年
  • 2015-01-14發佈了v1.0.0版本(io.js)
  • 2.x(io.js)
  • 3.x(io.js)
  • 2015年09月Node.js基金會已發佈Node.js V4.0版 與io.js合併後的第一個版本
  • 2015年10月Node.jsv4.2.0將是首個lts長期支持版本
  • 2016年末發佈到4.2.4 && 5.4.0
  • 2016年3月20日v4.4.0 LTS(長期支持版本)和v5.9.0 Stable(穩定版本)
  • 2016 年末 v6.0 支持95%以上的es6特性 , v7.0經過flag支持async函數,99%的es6特性
  • 2017年2月發佈v7.6版本,能夠不經過flag使用async函數

2、框架

演進時間線大體以下:mysql

  • 2010年tj寫的Express
  • 2011年Derby.js開始開發,8月5日,WalmartLabs的一位成員Eran Hammer提交了Hapi的第一次commit。Hapi本來是Postmile的一部分,而且最開始是基於Express構建的。後來它發展成本身本身的框架,
  • 2012年1月21日,專一於rest api的restify發佈1.0版本,同構的meteor開始投入開發,最像rails的sails也開始了開發
  • 2013年tj開始玩generator,編寫co這個generator執行器,並開始了Koa。2013 年下半年李成銀開始ThinkJS,參考ThinkPHP
  • 2014年,4月9日,express發佈4.0,進入4.x時代持續到今天,MEAN.js開始隨着MEAN架構的提出開始開發,意圖大一統,另外total.js開始,最像PHP’s Laravel 或 Python’s Django 或 ASP.NET MVC的框架
  • 2015年8月22日, 下一代Web框架Koa發佈1.0,能夠在node 0.12下面,經過co + generator實現同步邏輯,那時候co仍是基於thunkfy的,2015.10.30 ThinkJS發佈了Es2015+ 特性開發的v 2.0版本
  • 2016 年 09 月,螞蟻金服的eggjs,在 JSConf China 2016 上亮相併宣佈開源
  • 2017年2月,下一代Web框架Koa發佈2.0

咱們能夠根據框架的特性進行分類webpack

框架名稱 特性 點評
Express 簡單、實用,路由中間件等五臟俱全 最著名的Web框架
Derby.js && Meteor 同構 先後端都放到一塊兒,模糊了開發便捷,看上去更簡單,實際上上對開發來講要求更高
Sails、Total 面向其餘語言,Ruby、PHP等 借鑑業界優秀實現,也是Node.js成熟的一個標誌
MEAN.js 面向架構 相似於腳手架,又指望同構,結果只是蹭了熱點
Hapi和Restfy 面向Api && 微服務 移動互聯網時代Api的做用被放大,故而獨立分類。尤爲是對於微服務開發更是利器
ThinkJS 面向新特性 借鑑ThinkPHP,並慢慢走出本身的一條路,對於Async函數等新特性支持,無出其右
Koa 專一於異步流程改進 下一代Web框架

技術棧演進

自從ES 2015(俗稱ES 6)在Node.js 落地以後,整個Node.js開發都發生了翻天覆地的變化。自從0.10開始,Node.js就逐漸的加入了ES 6特性,好比0.12就可使用generator,才致使尋求異步流程控制的tj寫出了co這個著名的模塊,繼而誕生了Koa框架。可是在4.0以前,一直都是要經過flag才能開啓generator支持,故而Koa 1.0遲遲未發佈,在Node 4.0發佈才發佈的Koa 1.0。nginx

2015年,成熟的傳統,而2016年,變革開始git

核心變動:es語法支持es6

  • 使用Node.js 4.x或5.x裏的es6特性,若是想玩更高級的,可使用babel編譯支持es7特性,或者typescript
  • 合理使用standard 或者 xo 代碼風格約定
  • 適當的引入ES 6語法,只要Node.js SDK支持的,均可以使用
  • 須要你們重視OO(面向對象)寫法的學習和使用,雖然ES 6的OO機制不健全,但這是大方向,之後會一直加強。OO對於大型軟件開發更好。這其實也是我看好typescript的緣由。

對比一下變革先後的技術棧選型,但願讀者可以從中感覺到其中的變化github

分類 2015年 2016年 選型緣由
Web框架 express 4.x koa 1.0 && 2.0 (koa2.0剛發佈不久,喜歡折騰的能夠考慮) 主要在流程控制上的便利,異步畢竟要時刻注意,心累
數據庫 mongoose(mongodb) mongoose(mongodb) 對mongodb和mysql支持都同樣,不過是mongodb更簡單,足以應付絕大部分場景
異步流程控制 bluebird(Promise/A+實現) bluebird(Promise/A+實現)1) Koa 1.0 使用co + generator 2) Koa 2.0 使用async函數 流程控制演進路線,從promise到async函數,不管如何,promise都是基石,必要掌握的
模板引擎(視圖層) ejs && jade jade && nunjucks 給出了2種,一種可讀性好,另外一種簡潔高效,都是很是好的
測試 mocha ava mocha是Node.js裏著名的測試框架,但對新特性的支持沒有ava那麼好,而ava基於babel安裝也要大上好多
調試 node-inspector VSCode 在Node 6和7出來以後,node-inspector支持的不是那麼好,相反VSCode可視化,簡單,文件多時也不卡,特別好用

3、應用場景

MEAN是一個Javascript平臺的現代Web開發框架總稱,它是MongoDB + Express +AngularJS + NodeJS 四個框架的第一個字母組合。它與傳統LAMP同樣是一種全套開發工具的簡稱。在2014和2015年喜歡講這個,而且還有MEAN.js等框架,但今天已通過時,Node.js有了更多的應用場景。web

《Node.js in action》一書裏說,Node所針對的應用程序有一個專門的簡稱:DIRT。它表示數據密集型實時(data-intensive real-time)程序。由於Node自身在I/O上很是輕量,它善於將數據從一個管道混排或代理到另外一個管道上,這能在處理大量請求時持有不少開放的鏈接,而且只佔用一小部份內存。它的設計目標是保證響應能力,跟瀏覽器同樣。sql

這話不假,但在今天來看,DIRT仍是範圍小了。其實DIRT本質上說的I/O處理的都算,但隨着大前端的發展,Node.js已經再也不只是I/O處理相關,而是更加的「Node」!

這裏給出Node.js的若干使用場景

  • 網站(如express/koa等)
  • im即時聊天(socket.io)
  • api(移動端,pc,h5)
  • HTTP Proxy(淘寶、Qunar、騰訊、百度都有)
  • 前端構建工具(grunt/gulp/bower/webpack/fis3…)
  • 寫操做系統(NodeOS)
  • 跨平臺打包工具(PC端的electron、nw.js,好比釘釘PC客戶端、微信小程序IDE、微信客戶端,移動的cordova,即老的Phonegap,還有更加有名的一站式開發框架ionicframework)
  • 命令行工具(好比cordova、shell.js)
  • 反向代理(好比anyproxy,node-http-proxy)
  • 編輯器Atom、VSCode等

能夠說目前你們可以看到的、用到的軟件都有Node.js身影,當下最流行的軟件寫法也大都是基於Node.js的,好比PC客戶端luin/medis採用electron打包,寫法採用React+Redux。我本身一直的實踐的【Node全棧】,也正是基於這種趨勢而造成的。在將來,Node.js的應用場景會更加的普遍。

用途 說明 前景
爬蟲 搶了很多Python的份額,總體來講簡單,實用 看漲
命令行工具 寫工具、提升效率,node+npm真是無出其右 看漲
微服務與RPC Node作純後端很差作,但在新項目和微服務架構下,必有一席之地 看漲
微信公衆號開發 已經火了2年多了,尤爲是付費閱讀領域,還會繼續火下去,gitchat就是使用Node.js作的,並且還在招人 看漲
反向代理 Node.js能夠做爲nginx這樣的反向代理,雖然線上咱們不多這樣作,但它確確實實能夠這樣作。好比node-http-proxy和anyproxy等,其實使用Node.js作這種請求轉發是很是簡單的 看漲

 

來源:http://cnodejs.org/topic/58eee565a92d341e48cfe7fc

相關文章
相關標籤/搜索