国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
全棧工程師之路

1. 全棧工程師之路-Node.js

高可用架構(gòu)專用

原文[高可用架構(gòu)]

https://mp.weixin.qq.com/s?_biz=MzAwMDU1MTE1OQ==&mid=405001493&idx=1&sn=f0ecab9b31bad83fb065ac37bb728245&scene=1&srcid=0324iTRH12WbXL5VDxXnEhH8&key=710a5d99946419d938a0ffc16a3c72118eefbe33f3f8312ed218bccbde126b60e818c8eb1068a9b07bdc8116a077b911&ascene=0&uin=NDIzMjM3MDk1&devicetype=iMac+MacBookPro11%2C1+OSX+OSX+10.10.5+build(14F27)&version=11000006&passticket=xdp3crkTJPuOH6ggUMKnwvfDGKEnMUvwC5V%2FdxlW%2FKdNO9R8zI1xsDFSR4ZJECUU

仔細(xì)的對(duì)比了一遍,感謝tim yang和慶豐校長的整理,非常嚴(yán)謹(jǐn),比我講的要好,另外感謝霍老板封我是StuQ明星講師[呲牙][呲牙]

1.1. 主要內(nèi)容

  1. Why Node.js ?

    • 歷史

    • 槽點(diǎn)

    • 架構(gòu)平衡和選擇

    • 企業(yè)級(jí)

  2. 我眼中的Node.js核心

  3. 快速開發(fā)實(shí)踐

  4. 全棧 or 全爛 ?

    • 工具鏈

    • 前端開發(fā)4階段

    • Hybrid開發(fā)

    • 跨平臺(tái)

    • 全棧的可能

  5. 未來

最近比較火的2016年開發(fā)者調(diào)查了,Node.js和全棧、以及和js相關(guān)的技術(shù)都有不錯(cuò)的戰(zhàn)績,這次給大家分享一下《全棧工程師之路-Node.js》,準(zhǔn)備的還不夠充分,水平也有限,大家見諒啊

http://stackoverflow.com/research/developer-survey-2016

1.2. 講師介紹

桑世龍,目前在天津創(chuàng)業(yè),空弦科技 CTO,開源項(xiàng)目Moajs作者,StuQ明星講師 公司目前使用技術(shù)主要是Node.js, 技術(shù)棧算所謂的MEAN(mongodb + express + angular + node); 曾在新浪,網(wǎng)秦等工作過; 算全棧程序員吧,帶過前端、后端、數(shù)據(jù)分析、移動(dòng)端負(fù)責(zé)人、做過首席架構(gòu)師、技術(shù)總監(jiān),目前主要從事技術(shù)架構(gòu) + 招人工作

2. Part 1:為什么選用Node.js ?

已經(jīng)7歲的Node.js,你還熟悉么?

以前?現(xiàn)在?

2.1. 回顧一下2015年Node.js的發(fā)展歷史

http://i5ting.github.io/history-of-node-js/

2.1.1. Q1(1季度)

  • IO.js 1.0.0 發(fā)布

  • Joyent 推進(jìn)建立 Node.js 基金會(huì)

    • Joyent, IBM, Microsoft, PayPal, Fidelity, SAP and The Linux Foundation Join Forces to Support Node.js Community With Neutral and Open Governance

  • IO.js 和 Node.js 和解提案

2.1.2. Q2(2季度)

  • npm 支持私有模塊

  • Node 項(xiàng)目領(lǐng)導(dǎo)人 TJ Fontaine 逐步解除核心身份并離開 Joyent 公司

    • A changing of the guard in Nodeland.

  • Node.js 和 io.js 在 Node 基金會(huì)下合并情況

2.1.3. Q3(3季度)

  • 4.0 版本發(fā)布,即新的 1.0 版本

2.1.4. Q4(4季度)

  • Node v4.2.0,首個(gè)長期支持版本(LTS)

  • Apigee,RisingStack 和 Yahoo 加入 Node.js 基金會(huì)

  • Node Interactive

    • The first annual Node.js conference by the Node.js Foundation

2.2. 版本帝?

去年

  • 從v0.10.35 開始

  • 2015-01-14發(fā)布了v1.0.0版本(io.js)

  • 2.x(io.js)

  • 3.x(io.js)

  • 2015年09月Node.js基金會(huì)已發(fā)布Node.js V4.0版 與io.js合并后的第一個(gè)版本

  • 2015年10月Node.jsv4.2.0將是首個(gè)lts長期支持版本

  • 年底發(fā)布到4.2.4 && 5.4.0

目前(2016年3月20日)的2個(gè)版本

  • v4.4.0 LTS(長期支持版本)

  • v5.9.0 Stable(穩(wěn)定版本)

整體來說趨于穩(wěn)定

  • 成立了nodejs基金會(huì),能夠讓nodejs在未來有更好的開源社區(qū)支持

  • 發(fā)布了LTS版本,意味著api穩(wěn)定

  • 快速發(fā)版本,很多人吐槽這個(gè),其實(shí)換個(gè)角度看,這也是社區(qū)活躍的一個(gè)體現(xiàn),但如果大家真的看CHANGELOG,其實(shí)都是小改進(jìn),而且是邊邊角角的改進(jìn),也就是說nodejs的core(核心)已經(jīng)非常穩(wěn)定了,可以大規(guī)模使用

2.3. 以前我們總是喜歡拿異步說事兒

Node.js與生俱來的2個(gè)特性

  • event-driven

  • non-blocking I/O

結(jié)果,今天。。。各種【異步】。。。爛大街了

異步已經(jīng)不是明顯優(yōu)勢(shì)了

2.4. 除了性能,其他都是病?

  • 第一、callback hell問題,目前已經(jīng)很好的解決了,promise/generator/async后面會(huì)講

  • 第二、npm已經(jīng)是開源世界里最大的包管理器了,模塊非常豐富(25.6萬+)

官方說

Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

以前我們總是喜歡拿異步說事兒,現(xiàn)在我們拿Node.js的強(qiáng)大的生態(tài)來炫耀

2.5. 大事兒記

下面介紹點(diǎn)Node.js的大事兒記

2.5.1. 企業(yè)級(jí)

Node.js基金會(huì)的創(chuàng)始成員包括Joyent、IBM、Paypal、微軟、Fidelity和Linux基金會(huì)

更多參見 https://nodejs.org/en/foundation/members/

對(duì)于企業(yè)級(jí)開發(fā),Node.js是足夠的,無論從性能、安全、穩(wěn)定性等都是非常棒的。

空弦科技做的是基于云倉儲(chǔ)的SaaS服務(wù),給中小賣家提供服務(wù),核心系統(tǒng)是進(jìn)銷存+訂單池+WMS。目前來看不存在任何問題,稍后會(huì)講我們?yōu)樯哆x擇Node.js

2.5.2. es && babel

  • 2015年 Ecma國際大會(huì)宣布正式批準(zhǔn)ECMA-262第6版,亦即ECMAScript 2015(曾用名:ECMAScript 6、ES6)的語言規(guī)范

http://babeljs.io/

babel作為es編譯器,已經(jīng)大量開始使用了,模塊做的非常棒,還有人用babel寫其他語言編譯器

Node.js里在0.12之后才增加es6特性,es7的目前還不支持。

所以在Node.js里使用es里比較高級(jí)的特性,是需要babel去編譯處理的。

這是node追逐的事實(shí)標(biāo)準(zhǔn)

2.5.3. 微軟請(qǐng)求 Node.js 支持 ChakraCore

未來Node.js不只是基于chrome v8引擎,它還可以支持更多其他js引擎,對(duì)生態(tài)、效率提升等非常有好處

蔡偉小兄弟的查克拉benchmark的對(duì)比

基本結(jié)論是 V8 ES5 >> 查克拉 ES6 > 查克拉 ES5 > V8 ES6

2.6. 為什么我們選擇Node.js ?

先看一下我們的瓶頸在哪里 ?

  • 1)人(天津不好招人)

Node.js招不到,好多都是從java轉(zhuǎn)的,前端也不好找,好多也是從java轉(zhuǎn)的,我們相當(dāng)于從0開始組建團(tuán)隊(duì)

  • 2)開發(fā)速度

創(chuàng)業(yè)公司,5分鐘要造火箭。。。大家都懂

所以讓開發(fā)快速進(jìn)入狀態(tài),提高開發(fā)速度,對(duì)我們來說至關(guān)重要

  • 3)穩(wěn)定

在沒有專業(yè)運(yùn)維人員的情況下,如何保證系統(tǒng)可用、穩(wěn)定

于是就引出了我認(rèn)為的Node.js的好處

  • 1)即同樣不優(yōu)化,性能比大部分語言好(天生被黑的優(yōu)越感,沒辦法)

  • 2)即使優(yōu)化,也比其他語言簡單,比如java

  • 3)有足夠多的選擇和架構(gòu)的平衡

  • 4)如實(shí)在不夠,java補(bǔ)

2.7. 黑一下go語言吧

go不著

  • 沒有好的包管理

  • 沒有好的調(diào)試工具

  • 語法較難

適合高端人群,但對(duì)團(tuán)隊(duì)開發(fā)是有門檻的,不適用大部分團(tuán)隊(duì)

2.8. 選擇

Node.js給了我們足夠的選擇空間

2.8.1. 1)可難可易

  • 可以采用面向過程

  • 可以面向?qū)ο?/p>

  • 可以函數(shù)式

甚至可以用各種編譯器coffee、typescript、babel(es)等

對(duì)于從0開始的團(tuán)隊(duì)來講,可以先面向過程、然后隨著團(tuán)隊(duì)的成熟度,一點(diǎn)一點(diǎn)增加難度

2.8.2. 2)提供好的基礎(chǔ)和包管理工具

  • 測(cè)試相關(guān) tdd/bdd/測(cè)試覆蓋率

  • 規(guī)范化 standard、各種lint、hint

  • 構(gòu)建相關(guān) gulp、grunt、webpack,大量插件

  • 生成器 yo等

  • 包管理工具npm足夠簡單易用

以上這些都做大型軟件的基礎(chǔ),Node.js在這方面做得非常好

2.8.3. 3)特定場(chǎng)景的快速

很多人把mean組合(比如mean.io)起來,這樣做的好處是如果熟悉,開發(fā)速度確實(shí)會(huì)非常快,但確定是難度太大,很少有人能搞的定

metetor模糊了服務(wù)端和客戶端,是同構(gòu)的典型應(yīng)用,對(duì)于實(shí)時(shí)場(chǎng)景是非常高效的。

這種東西都算特定場(chǎng)景的快速,一般不敢輕易上,調(diào)優(yōu)難度非常大,如果有人能cover的住,在初期是非常高效的。

2.8.4. 4)總結(jié)

  • 可以簡單,可以難

  • 可以快、也可以慢

  • 可以開發(fā)大型軟件

還有一個(gè)問題就是如果以上不滿足咋辦?這時(shí)就需要架構(gòu)平衡了

2.9. 架構(gòu)平衡

先說技術(shù)選型的3個(gè)思考點(diǎn)

  • 在語言層面可以做,那語言層面做

  • 如果語言層面搞不定,那就架構(gòu)層面做

  • 如果架構(gòu)層面也搞不定,這東西就不能用了

各自做各自合適的事兒就好,下面分別舉例看看

我們很坦然的面對(duì)Node.js的優(yōu)點(diǎn)和缺點(diǎn)

  • 1)語言層面能解決的

    • 已有大量npm上的模塊(目前在25.6萬個(gè)以上)

    • 自己造輪子(站在海量包上+簡單語法+npm=快速)

    • 使用Node.js里的nan自己包裝c/c++輪子

絕大部分需求都可以滿足了

  • 2)架構(gòu)層面能解決的

    • 業(yè)務(wù)邊界、模塊拆分、面向服務(wù)

    • mq、rpc、cache

    • 運(yùn)維、監(jiān)控、自動(dòng)化

稍微解釋一下

  • 首先,架構(gòu)和是不是Node.js寫的沒關(guān)系,是獨(dú)立的

  • 其次,架構(gòu)師常用的東東有足夠的Node.js模塊支持,比如mq,像rabbitmq有比較好的node模塊支持,像rpc里thrift、grpc、tchannel支持的都不錯(cuò),我們使用的senecajs,比如redis,我們使用的ioredis,后面做ha都是一樣的。

  • 合適的場(chǎng)景用合適的東西

有很多東西是Node.js不擅長,又不在架構(gòu)范疇里的,咋辦?

3)如實(shí)在不夠,java補(bǔ)(嚴(yán)格點(diǎn),應(yīng)該叫其他語言補(bǔ)) - 比如復(fù)雜excel生成 - 比如apns推送(go做其實(shí)也很好,不過除了我,沒人能維護(hù)。。。)

但凡是java或其他語言里比較成熟的庫,可以作為獨(dú)立服務(wù)使用的,都可以做Node.js的支持。避免過多的時(shí)間用在早輪子上,影響開發(fā)進(jìn)度

2.10. 效率問題?

執(zhí)行效率:

  • 同樣不優(yōu)化,性能比大部分語言好

開發(fā)效率:

  • Node.js本身比較簡單,開發(fā)效率還是比較高的

  • 完善的生態(tài),比如測(cè)試、工具、npm大量模塊

缺少rails一樣的大殺器

  • scaffold腳手架

  • orm太弱

Node.js的web開發(fā)框架express、koa等,簡單,小巧,精致,缺點(diǎn)是集成度不夠,目前已有的mean或yo或sails等總有某種方面的不滿意

所以我們需要做的

  • 固化項(xiàng)目結(jié)構(gòu)

  • 限定orm

  • 自定義腳手架

偏偏Node.js提供了2點(diǎn),可以讓你30分鐘寫一個(gè)腳手架

  • cli命令模塊,編寫非常容易

  • 基于js的模板引擎(知名的30+)

2.11. 我們用Node.js做什么?

  • api服務(wù)

  • 前端(moa-frontend)

  • SDK(OAuth Provider)

  • 輔助開發(fā)cli工具

2.12. 目前進(jìn)度

  • 使用0.10.38,開發(fā)moajs框架

    • express/mongodb

    • pm2部署

    • 阿里云的slb負(fù)載

    • alinode監(jiān)控

  • 前后端分離

    • moa-api

    • moa-frontend

    • moa-h5(未能用)

  • 上redis緩存

  • 上rabbitmq

  • 上senaca作為rpc

  • 上kong作為api gateway(todo)

  • 上consul做服務(wù)發(fā)現(xiàn)和配置(todo)

  • 上elk作為日志分析處理(todo)

  • 使用docker compose作為本地開發(fā)環(huán)境(todo)

  • 線上docker(todo)

技術(shù)棧更新

  • nodejs 4.x(預(yù)計(jì)今年6月份)

  • koa(generator/co)

  • es6/es7(babel)

4.x在內(nèi)存和性能上都有非常大的提升,新的語言特性上,異步流程和語法上都需要學(xué)習(xí),故不急于升級(jí),待人才梯隊(duì)完善

目前的做法是小步快走

  • 一次只上一樣新技術(shù)

  • 形成梯隊(duì),即可準(zhǔn)備上新東西

  • 善用npm,實(shí)現(xiàn)3化

    • 模塊化

    • 最小化

    • 服務(wù)化

3. Part 2:我眼中的Node.js核心

  • 1)小而美的哲學(xué)

  • 2)從LAMP到MEAN

  • 3)異步流程控制

  • 4)Node.js Web開發(fā)

  • 5)Node.js 模塊開發(fā)

時(shí)間原因,接下來稍微介紹一下MEAN

3.1. 小而美的哲學(xué)

"Small is beautiful"是Unix哲學(xué)9條里的第一條,但對(duì)Node.js來說,它實(shí)在是再合適不過了

http://blog.izs.me/post/48281998870/unix-philosophy-and-nodejs

  • Write modules that do one thing well. Write a new module rather than complicate an old one.

  • Write modules that encourage composition rather than extension.

  • Write modules that handle data Streams, because that is the universal interface.

  • Write modules that are agnostic about the source of their input or the destination of their output.

  • Write modules that solve a problem you know, so you can learn about the ones you don’t.

  • Write modules that are small. Iterate quickly. Refactor ruthlessly. Rewrite bravely.

  • Write modules quickly, to meet your needs, with just a few tests for compliance. Avoid extensive specifications. Add a test for each bug you fix.

  • Write modules for publication, even if you only use them privately. You will appreciate documentation in the future.

3.2. 從LAMP到MEAN

MEAN是目前最潮的全棧javascript架構(gòu)

MEAN是一個(gè)Javascript平臺(tái)的現(xiàn)代Web開發(fā)框架總稱,它是MongoDB + Express +AngularJS + NodeJS 四個(gè)框架的第一個(gè)字母組合。它與傳統(tǒng)LAMP一樣是一種全套開發(fā)工具的簡稱。

從我的角度看

  • mysql用mongodb替換,nosql里最像rdbms的,從開發(fā)和性能都是有優(yōu)勢(shì)的(老畢已經(jīng)講過了)

  • angular的出現(xiàn)是一個(gè)時(shí)代,ioc,雙向綁定,指令等都曾讓無數(shù)熱血沸騰

  • nodejs提供了完全的生態(tài)和工具鏈,你要的它基本都有,感謝npm,早些年nodejs的性能甩php幾條街的

  • express作為nodejs示范項(xiàng)目,它非常精簡,是比較合適的web框架

我為什么選擇MEAN架構(gòu)?

  • 成熟、穩(wěn)定,簡單,有問題我們能cover住,所以我們選了nodejs

  • 把握趨勢(shì),以后nodejs的前景非??春?,尤其先后端統(tǒng)一,全棧方向

  • 在架構(gòu)上可以屏蔽可能風(fēng)險(xiǎn),不孤注一擲,也不會(huì)一葉障目,合理的使用其他語言,只要每個(gè)功能都以服務(wù)出現(xiàn),至于它是什么語言寫的,并不重要

  • 招人成本的性價(jià)比相對(duì)較高,技術(shù)棧新,容易吸引人才

最重要的一件事兒,是當(dāng)有問題的時(shí)候,有人能cover住,在創(chuàng)業(yè)初期這是最最重要的事兒。

我的一篇爆款文章《Node.js最新Web技術(shù)棧(2015年5月)》https://cnodejs.org/topic/55651bf07d4c64752effb4b1 講的就是我們用的技術(shù)棧

3.3. 異步流程控制

js流程控制的演進(jìn)過程,分以下5部分

  • 1) 回調(diào)函數(shù)Callbacks

  • 2) 異步JavaScript

  • 3) Promise/a+規(guī)范

  • 4) 生成器Generators/ yield(es6)

  • 5) Async/ await(es7)

  • 目前所有版本都支持Promise/a+規(guī)范

  • 目前Node.js 4.0 + 支持Generators/ yield

  • 目前不支持ES7里的Async/await,但可以通過babel實(shí)現(xiàn)

整體來說,對(duì)異步流程控制解決的還是比較好的。

詳見Node.js最新技術(shù)棧之Promise篇

3.4. Node.js Web開發(fā)

  • Node.js Web開發(fā)

    • express、koa

    • restify、hapi

    • 其他框架sails、meteor

各種類型web開發(fā)都支持的,一般我們采用非restful的使用express、koa更簡單

如果是純r(jià)estful,可以采用restify、hapi

另外還有快速模擬api的json-server,對(duì)rest支持超方便

3.5. Node.js 模塊開發(fā)

  • Node.js模塊開發(fā)

    • 普通模塊

    • cli

    • 腳手架scaffold

    • c/c++ addons

普通模塊和cli模塊只是差package.json里的

  "preferGlobal": "true",  "bin": {    "kp": "kp.js"  },

腳手架scaffold = cli + 模板生成,在Node.js里這2點(diǎn)都非常容易

在Node.js里寫c/c++擴(kuò)展,有nan抽象層,其他就看大家的c/c++水平了

4. Part 3:快速開發(fā)實(shí)踐

4.1. 1、業(yè)務(wù)邊界優(yōu)化

創(chuàng)業(yè)公司有很多可變性,要做的系統(tǒng)也無數(shù),如何保證業(yè)務(wù)系統(tǒng)的邊界是非常難的,我們其實(shí)走了很多彎路,圖-稍后補(bǔ)

4.2. 2、靜態(tài)api理論

當(dāng)需求和ue定下來之后,就開始編寫靜態(tài)api,這樣app、h5、前端就可以使用靜態(tài)api完成功能,而后端也可以以靜態(tài)api為標(biāo)準(zhǔn)來實(shí)現(xiàn),整體效率還是比較高的。

另外還有基于api生成http請(qǐng)求的思考(未完成)

4.3. 3、api約定

api的最佳實(shí)踐

  • http://developer.github.com/v3/ (嚴(yán)格的restful)

  • 微博API (可讀性強(qiáng),相對(duì)比較傳統(tǒng))

我們采用的微博API類似的,約定結(jié)構(gòu)也是類似的

res.api is an express middleware for render json api , it convention over api format like this :

{  data: {  },  status: {    code : x,    msg  : 'some message'  }}

詳見客戶端 API 開發(fā)總結(jié)

4.4. 4、約定結(jié)構(gòu)

和java開發(fā)里的目錄結(jié)構(gòu)類似,該分層的分層,適當(dāng)?shù)陌凑誩xpress/koa增加中間件、路由等目錄,便于開發(fā)

4.5. 5、使用npm模塊化

  • 使用npmjs的private私有模塊(目前做法)

  • 使用npm的本地模塊開發(fā)方法(測(cè)試和部署都非??欤?/p>

  • 搭建npm私服(todo)

hz-api-cloud-adminhz-api-cloud-orderhz-api-cloud-stockhz-api-privatehz-api-private-adminhz-dao-cloudhz-dao-privatehz-dao-usercenterhz-doc-apihz-frontendhz-mq hz-smshz-usercenterxbm-sdkhz-api-adminhz-api-crmhz-api-orderhz-api-statisticshz-api-stockhz-confighz-daohz-doc

4.6. 6、編寫生成器

在web開發(fā)里,寫了moajs生成器,類似于rails

moag order name:string password:string

其他開發(fā),如iOS開發(fā)里模型校驗(yàn)非常煩,于是寫了一個(gè)json2objc命令行工具,讀取json,生成oc代碼,可以節(jié)省不少時(shí)間

4.7. 7、Moajs框架和前后端分離

  • 前端:moa-frontend

    • public下面的采用nginx做反向代理

    • 其他的采用express+jade精簡代碼(ajax與后端交互)

  • 后端:moa-api

4.7.1. 1)moa生成器

即上面講的生成器scaffold

4.7.2. 2)moa-frontend

技術(shù)棧

  • express

  • jade

  • bootstrap、bootstrap-table

  • jquery

  • gulp

  • nginx

4.7.3. 3)moa-api

技術(shù)棧

Features

  • 自動(dòng)加載路由

  • 支持mongodb配置

  • 集成mongoosedao,快速寫crud等dao接口

  • 自帶用戶管理

  • 使用jsonwebtoken做用戶鑒權(quán)

  • 支持migrate測(cè)試

  • 支持mocha測(cè)試

  • 默認(rèn)集成res.api,便于寫接口

  • 集成supervisor,代碼變動(dòng),自動(dòng)重載

  • gulp自動(dòng)監(jiān)控文件變動(dòng),跑測(cè)試

  • gulp routes生成路由說明

  • 使用log4js記錄日志

4.7.4. 4)總結(jié)

從開發(fā)效果上看,還是非??斓?,非常穩(wěn)定的

更多參見我寫的《Moajs框架演進(jìn)之路》

4.8. 其他

  • 《從0開始寫Node.js框架》

5. Part 4:全棧 or 全爛 ?

5.1. Node.js相關(guān)工具

  • grunt/gulp/fis/webpack

  • bower/spm/npm

  • tdd/bdd cucumber/mocha

  • standard

  • babel/typescript/coffee

5.2. 前端開發(fā)4階段

  • html/css/js(基礎(chǔ))

  • jQuery、jQuery-ui,Extjs(曾經(jīng)流行)

  • Backbone(mvc),Angularjs、Vuejs(當(dāng)前流行)

  • React組件化(未來趨勢(shì))、Vuejs

Vuejs綜合Angular和React的優(yōu)點(diǎn),應(yīng)該是下一個(gè)流行趨勢(shì)

5.3. Hybrid開發(fā)

Hybrid混搭開發(fā)是指使用html5技術(shù)開發(fā)的跨瀏覽器應(yīng)用,并最終可以將html5.js.css等打包成apk和ipa包的開發(fā)方式。它也可以上傳到應(yīng)用商店,提供給移動(dòng)設(shè)備進(jìn)行安裝。它最大的好處是通過h5開發(fā)一次,就可以在多個(gè)平臺(tái)上安裝。

未來的2點(diǎn)

  • js一統(tǒng)天下(nodejs做后端,傳統(tǒng)web和h5使用javasctipt,更智能的工具如gulp,更簡單的寫法如coffeescript等)

  • h5大行其道(網(wǎng)速變快,硬件內(nèi)存增長)

5.4. 跨平臺(tái)

5.4.1. 1)c/s架構(gòu)到b/s架構(gòu)

這個(gè)大部分都清楚,不多說

5.4.2. 2)移動(dòng)端:加殼

在瀏覽器上做文章,把頁面生成各個(gè)移動(dòng)端的app文件

5.4.3. 3)PC端:繼續(xù)加殼

一樣是延續(xù)瀏覽器做文章,不過這次把頁面生成各個(gè)PC平臺(tái)的可執(zhí)行文件

  • node-webkit is renamed NW.js

  • Electron - Build cross platform desktop apps with web technologies

目前比較火的編輯器atomvscode都是基于Electron打包的。

5.4.4. 4) 組件化:統(tǒng)一用法

React的出現(xiàn)影響最大的是jsx的出現(xiàn),解決了長久以來組件化的問題,

  • 我們反復(fù)的折騰js,依然無法搞定

  • 我們嘗試OO,比如extjs

  • 我們最終還是找個(gè)中間格式j(luò)sx

單純的React只是view層面的,還不足以應(yīng)用,于是又有Redux

核心概念:Actions、Reducers 和 Store,簡單點(diǎn)說就是狀態(tài)控制

然后再結(jié)合打包加殼,變成app或可執(zhí)行文件

  • iOS、Android上用Cordova

  • PC上使用Electron

總結(jié)

  • 組件定義好(React)

  • 控制好組件之間的狀態(tài)切換(Redux)

  • 打包或加殼(Cordova or Electron)

這部分其實(shí)組件化了前端,那么能否用這樣的思想來組件化移動(dòng)端呢?

再看react-native

A framework for building native apps with React. http://facebook.github.io/react-native/

簡單點(diǎn)說,就是用React的語法來組件化iOS或Android SDK。

它們都在告訴我們,你們以后就玩這些組件就好了,你不需要知道復(fù)雜的SDK是什么

5.4.5. 5)當(dāng)下流行玩法

Medis is a beautiful, easy-to-use Redis management application built on the modern web with Electron, React, and Redux. It's powered by many awesome Node.js modules, especially ioredis and ssh2.

技術(shù)點(diǎn)

  • 使用Node.js模塊

  • 使用Webpack構(gòu)建

  • 使用React(視圖) + Redux(控制邏輯)

  • 使用Electron加殼打包

親,你看到未來了么?

5.4.6. 6)總結(jié)

講了node工具,前端4階段,hybrid,各種跨平臺(tái),目前就是為了介紹Node全棧的各種可能,下面講一下如何能做到Node全棧?

5.5. 如何全棧?

全棧核心

  • 后端不會(huì)的ui(界面相關(guān))

  • 前端不會(huì)的db(業(yè)務(wù)相關(guān))

只要打通這2個(gè)要點(diǎn),其他就比較容易了

5.5.1. 1)從后端轉(zhuǎn)

做后端的人

  • 對(duì)數(shù)據(jù)庫是比較熟悉,無論mongodb,還是mysql、postgres

  • 對(duì)前端理解比較弱,會(huì)基本的html,css,模板引擎等比較熟悉

4階段循序漸進(jìn),build與工具齊飛

前端開發(fā)4階段,我的感覺是按照順序,循序漸進(jìn)

  • html/css/js(基礎(chǔ))

  • jQuery、jQuery-ui,Extjs(曾經(jīng)流行)

  • Backbone,Angularjs(當(dāng)前流行)、Vuejs

  • React(未來趨勢(shì))、Vuejs

5.5.2. 2)從前端轉(zhuǎn)

從前端往后端轉(zhuǎn),api接口非常容易學(xué)會(huì),像express、koa這類框架大部分人一周就能學(xué)會(huì),最難的是對(duì)db、er模型的理解,說直白點(diǎn),還是業(yè)務(wù)需求落地的理解

我們來想想一般的前端有什么技能?

  • html

  • css(兼容瀏覽器)

  • js會(huì)點(diǎn)(可能更多的是會(huì)點(diǎn)jquery)

  • ps切圖

  • firebug和chrome debuger會(huì)的人都不太多

  • 用過幾個(gè)框架,大部分人是僅僅會(huì)用

  • 英語一般

  • svn/git會(huì)一點(diǎn)

那么他們?nèi)绻朐谇岸祟I(lǐng)域做的更深有哪些難點(diǎn)呢?

  • 基礎(chǔ):oo,dp,命令,shell,構(gòu)建等

  • 編程思想上的理解(mvc、ioc,規(guī)約等)

  • 區(qū)分概念

  • 外圍驗(yàn)收,如h5和hybird等

  • 追趕趨勢(shì),如何學(xué)習(xí)新東西

以上皆是痛點(diǎn)。

所以比較好的辦法

  • 玩轉(zhuǎn)npm、gulp這樣的前端工具類(此時(shí)還是前端)

  • 使用node做前后端分離(此時(shí)還是前端)

    • express、koa這類框架

    • jade、ejs等模板引擎

    • nginx

  • 玩轉(zhuǎn)【后端】異步流程處理(promise/es6的(generator|yield)/es7(async|await))

  • 玩轉(zhuǎn)【后端】mongodb、mysql對(duì)應(yīng)的node模塊

從我們的經(jīng)驗(yàn)看,這樣是比較靠譜的。

https://github.com/moajs/moa-frontend

就是最簡單前后端分離,里面沒有任何和db相關(guān),

技術(shù)棧

  • express

  • jade

  • bootstrap,bootstrap-table

  • jquery

  • gulp

  • nginx

一般的前端都非常容易學(xué)會(huì),基本2周就已經(jīng)非常熟練了,我的計(jì)劃是半年后,讓他們接觸【異步流程處理】和【數(shù)據(jù)庫】相關(guān)內(nèi)容,學(xué)習(xí)后端代碼,就可以全棧了

5.5.3. 3)從移動(dòng)端轉(zhuǎn)

移動(dòng)端分

  • native原生開發(fā)

  • hybrid混搭式開發(fā)

原生開發(fā)就是iOS用oc/swift,Android用java或scala等,就算偶爾嵌入webview,能玩js的機(jī)會(huì)也非常好少

所以移動(dòng)端轉(zhuǎn)全棧的方法,最好是從cordova(以前叫phonegap)開始做hybrid開發(fā)。

  • 只要關(guān)注www目錄里的h5即可,比較簡單

  • 如果h5不足以完成的情況下,可以編寫cordova插件,即通過插件讓js調(diào)用原生sdk里功能

  • cordova的cli可以通過npm安裝,學(xué)習(xí)npm的好方法

  • 學(xué)習(xí)gulp構(gòu)建工具

只要入了h5的坑,其實(shí)就非常好辦了。

  • 然后h5、zeptojs、iscroll、fastclick等

  • 然后微信常用的,如weui、vux(vue+weui)、jmui(react+weui)

  • 然后可以玩點(diǎn)框架,比如jquery mobile,sencha touch

  • 然后可以玩點(diǎn)高級(jí)貨,ionicframework(基于angularjs、cordova)

  • 然后前端4階段,依次打怪升級(jí)

  • 然后node

這個(gè)基本上是我走的路,從2010年寫iOS、做phonegap(當(dāng)時(shí)是0.9.3)、一路走到現(xiàn)在的總結(jié)吧

6. Part 5:未來

可能是一場(chǎng)春夢(mèng),也可能一個(gè)變革機(jī)遇,我們更相信它是變革機(jī)遇,拭目以待吧

謝謝大家

7. Q & A

7.1. 問題一:在全棧的語言選擇上,除了node.js,是否還考慮過其他語言?

有的,未來swift和lua是有可能的。swift的語法和性能上有很大優(yōu)勢(shì),lua在openresty的推動(dòng)下也有機(jī)會(huì),不過沒有swift大

像WebAssembly之類的就不太看好了

7.2. 問題二:請(qǐng)教桑老師:剛才你說的并發(fā)開發(fā)流程中靜態(tài)api指的是api文檔?

如果是的話誰負(fù)責(zé)編寫?你們目前已經(jīng)是一個(gè)人分模塊從前端寫到后端了嗎?

目前沒做到文檔即靜態(tài)api,所以目前是直接提供json和部分json-server

負(fù)責(zé)是后端開發(fā)的leader在寫,他的進(jìn)度會(huì)比正常開發(fā)要早一周左右

目前不是一個(gè)人寫所有的前后端,團(tuán)隊(duì)成立不久,天津Node.js會(huì)的不多,所以還是前后端分離。但是通過moa-frontend可以讓前端了解express等后端知識(shí),適當(dāng)?shù)臅r(shí)候會(huì)給予機(jī)會(huì),前端轉(zhuǎn)后端

7.3. 問題三:第一貴司在開發(fā)協(xié)作中提到了靜態(tài)api,請(qǐng)問是不是有什么比較好的工具可以推薦?

nodejs里json-server 比較好

我其實(shí)很想圍繞靜態(tài)api,寫各種請(qǐng)求的生成器,只要api出來,文檔和各平臺(tái)的http請(qǐng)求代碼就生成出來,同時(shí)可以對(duì)正式api進(jìn)行壓測(cè),可惜目前還沒精力寫

7.4. 問題四:做hybrid app在移動(dòng)端會(huì)遇到性能問題吧。。有沒有什么優(yōu)化經(jīng)驗(yàn)可以分享?

  • 足夠輕量級(jí),少選大框架,做好前端該有的優(yōu)化

  • 注意touch和click的區(qū)別,比如fastclick或zeptojs的tap手勢(shì)

  • Chrome profile(css3動(dòng)畫)

  • 使用weinre真機(jī)測(cè)試

我的h5實(shí)踐

7.5. 問題五:如果都全棧了,當(dāng)前你們團(tuán)隊(duì)是如何分工的?

我們團(tuán)隊(duì)還是傾向于分工專業(yè)化,各個(gè)服務(wù)粒度非常小,便于輪崗、還有就是可以為以后像google那樣代碼開放做準(zhǔn)備

但是有很多情況下,是需要有機(jī)動(dòng)的突擊隊(duì)的(尤其是創(chuàng)業(yè)時(shí)期),這樣可以隨便組合,另外就是全棧為remote提供了更多便利性。

7.6. 問題六:h5在手機(jī)上用iscroll坑比較多啊 尤其三星打開硬件加速的時(shí)候render頁面,桑老師怎么看?

可以嘗試一下淘寶系的h5虛擬化,鬼道曾經(jīng)在as大會(huì)上講過的,我們目前還沒能力做這么深層次的優(yōu)化

7.7. 問題七:Node.js做業(yè)務(wù)金額計(jì)算的金額性能和精度夠嗎

1)你問的不是Node.js,而是Node.js要操作的數(shù)據(jù)庫。 2)耗性能的計(jì)算可以在架構(gòu)上平衡的 - 如果可以延時(shí),mq就可以了 - 如果是非延時(shí)情況,可以采用其他語言編寫對(duì)應(yīng)服務(wù),沒必要非要一定要Node.js 3)我們目前的場(chǎng)景,還沒有在計(jì)算遇到瓶頸

7.8. 問題八:關(guān)于API返回格式那里,對(duì)于status為什么不打平了把code和message放出來?這么設(shè)定有什么好處么?

語義上更加清晰

整個(gè)返回的json就只有data和status,如果status.code!=0,我取msg就好了,如果等于0,處理data數(shù)據(jù)

這種設(shè)計(jì)不見得多好,不過結(jié)構(gòu)清晰,對(duì)于開發(fā)者來說,是比較容易接受的


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【全文】狼叔:如何正確的學(xué)習(xí)Node.js
2018微信十三水語言、框架和工具
YodaOS開源啦!一個(gè)屬于 Node.js 社區(qū)的操作系統(tǒng)
前端開發(fā)框架之Electron的認(rèn)識(shí)
通過node.js進(jìn)行前后端分離
bower 和 npm 的區(qū)別詳細(xì)介紹
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服