MEAN雜談
前言
公司要求組織一次培訓,面向所有技術人員,所以講的東西比較雜淺,高手請繞道~
初識
乍看之下以為這是一個js插件/框架,點進 github首頁 一看嚇了一跳,什么?4種技術融合在一起,了解它之前還得先學其它的,如此高的學習成本只能望而卻步了~
偶見
直到有一天一位國外的工程師發郵件告訴我說其有一個 不錯node.js教程 希望通過我的博客介紹給大家。打開一看,天啊~一個教程寫了一個長長的頁面。。。懷著浮躁的心掃了一眼,覺得摘一下關鍵點翻譯一下就算了。可正當我開始查 找關鍵點的時候,發現教程講的不僅僅是node.js,而是基于node.js的全棧開發技術,而且教程超級詳細,圖文結合,于是發了個愿,全文翻譯了下 來~
why
為什么mean.js引起我的強烈關注?原因如下:
- 前后端一種開發語言javascript。 這對前端的同學是有利的,大大降低了學習成本。較之前的jsp、php前后端都是用的不同語言。
- 前后端用一種數據類型JSON。 前端json數據一般到后端都需要進行轉譯后,再通過sql到數據庫。而mean從瀏覽器到數據庫都是用的json格式的數據,即存即取即用,無需轉化和復雜的sql語句。
這兩種主要的特性就好比嬴政建立秦朝之后統一貨幣、度量單位,重要性可見一斑。 - 可替換性。 mean的核心是node.js,在使用node.js的前提下,expressjs可以被thinkjs、koajs替換,angularjs可以被vuejs、avalonjs替換,mongodb可以被mysql替換(不過JSON數據格式優勢就沒有了)。
當然,世上沒有銀彈,每種技術都有自己的缺陷:mongodb不適于事務性較強的系統,angular框架較重不適合密集的dom操作…
另類的mongodb
和數據庫打交道的往往是后端工程師和DBA,對于前端工程師來說,接觸得就比較少了。雖然筆者有jsp開發經驗,也是基于傳統的mysql、oracle等關系型數據庫,mongodb還是個新鮮玩意。所以結合官網文檔以及個人寫的demo來看,有以下幾個印象:
-
面向文檔。關系數據庫是由幾個范式來定義的,把數據都轉換成二維的結構,規定表中不可以有表。提升數據原子操作的同時犧牲了查詢性能 (查詢一些數據的時候需要多表關聯)。而mongodb是nosql數據庫中的一種,用BSON(Binary JSON)的格式讓數據可以嵌套,屬于反范式設計。通過增加數據冗余性來提升查詢性能,隨之也帶來了冗余數據的同步更新問題。
據一些資料顯示,mongodb的查詢性能適用于大數據,所以最近比較火。當然我覺得其取消了sql,使用JSON數據格式使得簡化了操作,也是有一定優勢的。
簡捷的express
node i express -g express [option] [dirctory]
兩條命令創建一個web應用,是不是很geek?第一個特點:快速

npm上隨便一搜,20000+的模塊。流行程度和插件支撐都是首屈一指。第二個特點:開放

再看工程結構,十幾個文件,清晰小巧。第三個特點:簡單
最近有個框架聽說也比較火——thinkjs。下載試用了一下,可以用ES6開發,好處是號稱解決了回調問題,壞處是學習成本和時間…順便跟 express對比了一下,總的來說,兩邊的框架結構差不多,主要都是路由、視圖、中間件。thinkjs是比較崇拜模塊化的,模塊化之間耦合度很低,可 以獨立定義視圖引擎等,這種設計在大型應用開發部署上可能會有優勢吧。但是它有個短板啊~出生時間短,插件少得可憐,所以還是不敢輕易嘗試。
開放的node
如果要我主觀地評價一下node.js,我只能說它就是前端工程師的翅膀,而npm為這雙翅膀插上了豐富的羽毛。
它把傳統的基于任務/請求的等待模式變成了事件驅動的非阻塞模式,大大提升了并發能力和吞吐量。說著說著想到了nginx,當然現在一些大企業看他們的架構都是nginx架設在node.js之上,真是強強結合。
當然node.js也有問題:單線程易崩潰(cluster利用多核、pm2部署)、回調可讀性差(promise模式,q或async插 件,ES6下更是自帶promise)。只是瑕不掩瑜,如果配合外殼,亦可以開發混合桌面應用,例如hex。無需多說,看看cnode社區的熱鬧程度就知 道了~
強勢的angular
看2015js調查中,angular使用者還不少,當然這種重框架也經常受人詬病,所以也有替代方案。輕量級的有vue.js(可惜不支持 IE8),avalon.js(可惜社區不活躍,插件不多),還有基于jquery的數據綁定插件。可見MV*這種結構還是很受歡迎的。
演示材料
基于express.js做的ppt
MEAN技術分享博客: http://yalishizhude.github.io
作者:亞里士朱德