高可用架構(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明星講師[呲牙][呲牙]
Why Node.js ?
歷史
槽點(diǎn)
架構(gòu)平衡和選擇
企業(yè)級(jí)
我眼中的Node.js核心
快速開發(fā)實(shí)踐
全棧 or 全爛 ?
工具鏈
前端開發(fā)4階段
Hybrid開發(fā)
跨平臺(tái)
全棧的可能
未來
最近比較火的2016年開發(fā)者調(diào)查了,Node.js和全棧、以及和js相關(guān)的技術(shù)都有不錯(cuò)的戰(zhàn)績,這次給大家分享一下《全棧工程師之路-Node.js》,準(zhǔn)備的還不夠充分,水平也有限,大家見諒啊
http://stackoverflow.com/research/developer-survey-2016
桑世龍,目前在天津創(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) + 招人工作
已經(jīng)7歲的Node.js,你還熟悉么?
以前?現(xiàn)在?
http://i5ting.github.io/history-of-node-js/
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 和解提案
npm 支持私有模塊
Node 項(xiàng)目領(lǐng)導(dǎo)人 TJ Fontaine 逐步解除核心身份并離開 Joyent 公司
A changing of the guard in Nodeland.
Node.js 和 io.js 在 Node 基金會(huì)下合并情況
4.0 版本發(fā)布,即新的 1.0 版本
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
去年
從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ī)模使用
Node.js與生俱來的2個(gè)特性
event-driven
non-blocking I/O
結(jié)果,今天。。。各種【異步】。。。爛大街了
異步已經(jīng)不是明顯優(yōu)勢(shì)了
第一、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)來炫耀
下面介紹點(diǎn)Node.js的大事兒記
2014年 nearform NODE.JS為什么會(huì)成為企業(yè)中的首選技術(shù)
2015年 IBM 收購 StrongLoop,拓展云服務(wù)業(yè)務(wù)
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
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)
2016年01月22日,微軟請(qǐng)求 Node.js 支持 ChakraCore
未來Node.js不只是基于chrome v8引擎,它還可以支持更多其他js引擎,對(duì)生態(tài)、效率提升等非常有好處
蔡偉小兄弟的查克拉benchmark的對(duì)比
基本結(jié)論是 V8 ES5 >> 查克拉 ES6 > 查克拉 ES5 > V8 ES6
先看一下我們的瓶頸在哪里 ?
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ǔ)
go不著
沒有好的包管理
沒有好的調(diào)試工具
語法較難
適合高端人群,但對(duì)團(tuán)隊(duì)開發(fā)是有門檻的,不適用大部分團(tuán)隊(duì)
Node.js給了我們足夠的選擇空間
可以采用面向過程
可以面向?qū)ο?/p>
可以函數(shù)式
甚至可以用各種編譯器coffee、typescript、babel(es)等
對(duì)于從0開始的團(tuán)隊(duì)來講,可以先面向過程、然后隨著團(tuán)隊(duì)的成熟度,一點(diǎn)一點(diǎn)增加難度
測(cè)試相關(guān) tdd/bdd/測(cè)試覆蓋率
規(guī)范化 standard、各種lint、hint
構(gòu)建相關(guān) gulp、grunt、webpack,大量插件
生成器 yo等
包管理工具npm足夠簡單易用
以上這些都做大型軟件的基礎(chǔ),Node.js在這方面做得非常好
很多人把mean組合(比如mean.io)起來,這樣做的好處是如果熟悉,開發(fā)速度確實(shí)會(huì)非常快,但確定是難度太大,很少有人能搞的定
metetor模糊了服務(wù)端和客戶端,是同構(gòu)的典型應(yīng)用,對(duì)于實(shí)時(shí)場(chǎng)景是非常高效的。
這種東西都算特定場(chǎng)景的快速,一般不敢輕易上,調(diào)優(yōu)難度非常大,如果有人能cover的住,在初期是非常高效的。
可以簡單,可以難
可以快、也可以慢
可以開發(fā)大型軟件
還有一個(gè)問題就是如果以上不滿足咋辦?這時(shí)就需要架構(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)度
執(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+)
api服務(wù)
前端(moa-frontend)
SDK(OAuth Provider)
輔助開發(fā)cli工具
使用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ù)化
1)小而美的哲學(xué)
2)從LAMP到MEAN
3)異步流程控制
4)Node.js Web開發(fā)
5)Node.js 模塊開發(fā)
時(shí)間原因,接下來稍微介紹一下MEAN
"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.
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ù)棧
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 Web開發(fā)
express、koa
restify、hapi
其他框架sails、meteor
各種類型web開發(fā)都支持的,一般我們采用非restful的使用express、koa更簡單
如果是純r(jià)estful,可以采用restify、hapi
另外還有快速模擬api的json-server,對(duì)rest支持超方便
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++水平了
創(chuàng)業(yè)公司有很多可變性,要做的系統(tǒng)也無數(shù),如何保證業(yè)務(wù)系統(tǒng)的邊界是非常難的,我們其實(shí)走了很多彎路,圖-稍后補(bǔ)
當(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)求的思考(未完成)
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' }}
和java開發(fā)里的目錄結(jié)構(gòu)類似,該分層的分層,適當(dāng)?shù)陌凑誩xpress/koa增加中間件、路由等目錄,便于開發(fā)
使用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
在web開發(fā)里,寫了moajs生成器,類似于rails
moag order name:string password:string
其他開發(fā),如iOS開發(fā)里模型校驗(yàn)非常煩,于是寫了一個(gè)json2objc命令行工具,讀取json,生成oc代碼,可以節(jié)省不少時(shí)間
前端:moa-frontend
public下面的采用nginx做反向代理
其他的采用express+jade精簡代碼(ajax與后端交互)
后端:moa-api
即上面講的生成器scaffold
技術(shù)棧
express
jade
bootstrap、bootstrap-table
jquery
gulp
nginx
技術(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記錄日志
從開發(fā)效果上看,還是非??斓?,非常穩(wěn)定的
更多參見我寫的《Moajs框架演進(jìn)之路》
《從0開始寫Node.js框架》
grunt/gulp/fis/webpack
bower/spm/npm
tdd/bdd cucumber/mocha
standard
babel/typescript/coffee
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ì)
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)存增長)
這個(gè)大部分都清楚,不多說
在瀏覽器上做文章,把頁面生成各個(gè)移動(dòng)端的app文件
一樣是延續(xù)瀏覽器做文章,不過這次把頁面生成各個(gè)PC平臺(tái)的可執(zhí)行文件
目前比較火的編輯器atom和vscode都是基于Electron打包的。
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)端呢?
A framework for building native apps with React. http://facebook.github.io/react-native/
簡單點(diǎn)說,就是用React的語法來組件化iOS或Android SDK。
它們都在告訴我們,你們以后就玩這些組件就好了,你不需要知道復(fù)雜的SDK是什么
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加殼打包
親,你看到未來了么?
講了node工具,前端4階段,hybrid,各種跨平臺(tái),目前就是為了介紹Node全棧的各種可能,下面講一下如何能做到Node全棧?
全棧核心
后端不會(huì)的ui(界面相關(guān))
前端不會(huì)的db(業(yè)務(wù)相關(guān))
只要打通這2個(gè)要點(diǎ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
從前端往后端轉(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í)后端代碼,就可以全棧了
移動(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é)吧
可能是一場(chǎng)春夢(mèng),也可能一個(gè)變革機(jī)遇,我們更相信它是變革機(jī)遇,拭目以待吧
謝謝大家
有的,未來swift和lua是有可能的。swift的語法和性能上有很大優(yōu)勢(shì),lua在openresty的推動(dòng)下也有機(jī)會(huì),不過沒有swift大
像WebAssembly之類的就不太看好了
如果是的話誰負(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)后端
nodejs里json-server 比較好
我其實(shí)很想圍繞靜態(tài)api,寫各種請(qǐng)求的生成器,只要api出來,文檔和各平臺(tái)的http請(qǐng)求代碼就生成出來,同時(shí)可以對(duì)正式api進(jìn)行壓測(cè),可惜目前還沒精力寫
足夠輕量級(jí),少選大框架,做好前端該有的優(yōu)化
注意touch和click的區(qū)別,比如fastclick或zeptojs的tap手勢(shì)
Chrome profile(css3動(dòng)畫)
使用weinre真機(jī)測(cè)試
我們團(tuán)隊(duì)還是傾向于分工專業(yè)化,各個(gè)服務(wù)粒度非常小,便于輪崗、還有就是可以為以后像google那樣代碼開放做準(zhǔn)備
但是有很多情況下,是需要有機(jī)動(dòng)的突擊隊(duì)的(尤其是創(chuàng)業(yè)時(shí)期),這樣可以隨便組合,另外就是全棧為remote提供了更多便利性。
可以嘗試一下淘寶系的h5虛擬化,鬼道曾經(jīng)在as大會(huì)上講過的,我們目前還沒能力做這么深層次的優(yōu)化
1)你問的不是Node.js,而是Node.js要操作的數(shù)據(jù)庫。 2)耗性能的計(jì)算可以在架構(gòu)上平衡的 - 如果可以延時(shí),mq就可以了 - 如果是非延時(shí)情況,可以采用其他語言編寫對(duì)應(yīng)服務(wù),沒必要非要一定要Node.js 3)我們目前的場(chǎng)景,還沒有在計(jì)算遇到瓶頸
語義上更加清晰
整個(gè)返回的json就只有data和status,如果status.code!=0,我取msg就好了,如果等于0,處理data數(shù)據(jù)
這種設(shè)計(jì)不見得多好,不過結(jié)構(gòu)清晰,對(duì)于開發(fā)者來說,是比較容易接受的
聯(lián)系客服