高可用架構專(zhuān)用
原文[高可用架構]
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
仔細的對比了一遍,感謝tim yang和慶豐校長(cháng)的整理,非常嚴謹,比我講的要好,另外感謝霍老板封我是StuQ明星講師[呲牙][呲牙]
Why Node.js ?
歷史
槽點(diǎn)
架構平衡和選擇
企業(yè)級
我眼中的Node.js核心
快速開(kāi)發(fā)實(shí)踐
全棧 or 全爛 ?
工具鏈
前端開(kāi)發(fā)4階段
Hybrid開(kāi)發(fā)
跨平臺
全棧的可能
未來(lái)
最近比較火的2016年開(kāi)發(fā)者調查了,Node.js和全棧、以及和js相關(guān)的技術(shù)都有不錯的戰績(jì),這次給大家分享一下《全棧工程師之路-Node.js》,準備的還不夠充分,水平也有限,大家見(jiàn)諒啊
http://stackoverflow.com/research/developer-survey-2016
桑世龍,目前在天津創(chuàng )業(yè),空弦科技 CTO,開(kāi)源項目Moajs作者,StuQ明星講師 公司目前使用技術(shù)主要是Node.js, 技術(shù)棧算所謂的MEAN(mongodb + express + angular + node); 曾在新浪,網(wǎng)秦等工作過(guò); 算全棧程序員吧,帶過(guò)前端、后端、數據分析、移動(dòng)端負責人、做過(guò)首席架構師、技術(shù)總監,目前主要從事技術(shù)架構 + 招人工作
已經(jīng)7歲的Node.js,你還熟悉么?
以前?現在?
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 項目領(lǐng)導人 TJ Fontaine 逐步解除核心身份并離開(kāi) Joyent 公司
A changing of the guard in Nodeland.
Node.js 和 io.js 在 Node 基金會(huì )下合并情況
4.0 版本發(fā)布,即新的 1.0 版本
Node v4.2.0,首個(gè)長(cháng)期支持版本(LTS)
Apigee,RisingStack 和 Yahoo 加入 Node.js 基金會(huì )
Node Interactive
The first annual Node.js conference by the Node.js Foundation
去年
從v0.10.35 開(kāi)始
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長(cháng)期支持版本
年底發(fā)布到4.2.4 && 5.4.0
目前(2016年3月20日)的2個(gè)版本
v4.4.0 LTS(長(cháng)期支持版本)
v5.9.0 Stable(穩定版本)

整體來(lái)說(shuō)趨于穩定
成立了nodejs基金會(huì ),能夠讓nodejs在未來(lái)有更好的開(kāi)源社區支持
發(fā)布了LTS版本,意味著(zhù)api穩定
快速發(fā)版本,很多人吐槽這個(gè),其實(shí)換個(gè)角度看,這也是社區活躍的一個(gè)體現,但如果大家真的看CHANGELOG,其實(shí)都是小改進(jìn),而且是邊邊角角的改進(jìn),也就是說(shuō)nodejs的core(核心)已經(jīng)非常穩定了,可以大規模使用
Node.js與生俱來(lái)的2個(gè)特性
event-driven
non-blocking I/O
結果,今天。。。各種【異步】。。。爛大街了
異步已經(jīng)不是明顯優(yōu)勢了
第一、callback hell問(wèn)題,目前已經(jīng)很好的解決了,promise/generator/async后面會(huì )講
第二、npm已經(jīng)是開(kāi)源世界里最大的包管理器了,模塊非常豐富(25.6萬(wàn)+)
官方說(shuō)
Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.
以前我們總是喜歡拿異步說(shuō)事兒,現在我們拿Node.js的強大的生態(tài)來(lá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ì )

更多參見(jiàn) https://nodejs.org/en/foundation/members/
對于企業(yè)級開(kāi)發(fā),Node.js是足夠的,無(wú)論從性能、安全、穩定性等都是非常棒的。
空弦科技做的是基于云倉儲的SaaS服務(wù),給中小賣(mài)家提供服務(wù),核心系統是進(jìn)銷(xiāo)存+訂單池+WMS。目前來(lái)看不存在任何問(wèn)題,稍后會(huì )講我們?yōu)樯哆x擇Node.js
2015年 Ecma國際大會(huì )宣布正式批準ECMA-262第6版,亦即ECMAScript 2015(曾用名:ECMAScript 6、ES6)的語(yǔ)言規范
http://babeljs.io/
babel作為es編譯器,已經(jīng)大量開(kāi)始使用了,模塊做的非常棒,還有人用babel寫(xiě)其他語(yǔ)言編譯器
Node.js里在0.12之后才增加es6特性,es7的目前還不支持。
所以在Node.js里使用es里比較高級的特性,是需要babel去編譯處理的。
這是node追逐的事實(shí)標準
2016年01月22日,微軟請求 Node.js 支持 ChakraCore
未來(lái)Node.js不只是基于chrome v8引擎,它還可以支持更多其他js引擎,對生態(tài)、效率提升等非常有好處
蔡偉小兄弟的查克拉benchmark的對比
基本結論是 V8 ES5 >> 查克拉 ES6 > 查克拉 ES5 > V8 ES6
先看一下我們的瓶頸在哪里 ?
1)人(天津不好招人)
Node.js招不到,好多都是從java轉的,前端也不好找,好多也是從java轉的,我們相當于從0開(kāi)始組建團隊
2)開(kāi)發(fā)速度
創(chuàng )業(yè)公司,5分鐘要造火箭。。。大家都懂
所以讓開(kāi)發(fā)快速進(jìn)入狀態(tài),提高開(kāi)發(fā)速度,對我們來(lái)說(shuō)至關(guān)重要
3)穩定
在沒(méi)有專(zhuān)業(yè)運維人員的情況下,如何保證系統可用、穩定
于是就引出了我認為的Node.js的好處
1)即同樣不優(yōu)化,性能比大部分語(yǔ)言好(天生被黑的優(yōu)越感,沒(méi)辦法)
2)即使優(yōu)化,也比其他語(yǔ)言簡(jiǎn)單,比如java
3)有足夠多的選擇和架構的平衡
4)如實(shí)在不夠,java補
go不著(zhù)
沒(méi)有好的包管理
沒(méi)有好的調試工具
語(yǔ)法較難
適合高端人群,但對團隊開(kāi)發(fā)是有門(mén)檻的,不適用大部分團隊
Node.js給了我們足夠的選擇空間
可以采用面向過(guò)程
可以面向對象
可以函數式
甚至可以用各種編譯器coffee、typescript、babel(es)等
對于從0開(kāi)始的團隊來(lái)講,可以先面向過(guò)程、然后隨著(zhù)團隊的成熟度,一點(diǎn)一點(diǎn)增加難度
測試相關(guān) tdd/bdd/測試覆蓋率
規范化 standard、各種lint、hint
構建相關(guān) gulp、grunt、webpack,大量插件
生成器 yo等
包管理工具npm足夠簡(jiǎn)單易用
以上這些都做大型軟件的基礎,Node.js在這方面做得非常好
很多人把mean組合(比如mean.io)起來(lái),這樣做的好處是如果熟悉,開(kāi)發(fā)速度確實(shí)會(huì )非???,但確定是難度太大,很少有人能搞的定
metetor模糊了服務(wù)端和客戶(hù)端,是同構的典型應用,對于實(shí)時(shí)場(chǎng)景是非常高效的。
這種東西都算特定場(chǎng)景的快速,一般不敢輕易上,調優(yōu)難度非常大,如果有人能cover的住,在初期是非常高效的。
可以簡(jiǎn)單,可以難
可以快、也可以慢
可以開(kāi)發(fā)大型軟件
還有一個(gè)問(wèn)題就是如果以上不滿(mǎn)足咋辦?這時(shí)就需要架構平衡了
先說(shuō)技術(shù)選型的3個(gè)思考點(diǎn)
在語(yǔ)言層面可以做,那語(yǔ)言層面做
如果語(yǔ)言層面搞不定,那就架構層面做
如果架構層面也搞不定,這東西就不能用了

各自做各自合適的事兒就好,下面分別舉例看看
我們很坦然的面對Node.js的優(yōu)點(diǎn)和缺點(diǎn)
1)語(yǔ)言層面能解決的
已有大量npm上的模塊(目前在25.6萬(wàn)個(gè)以上)
自己造輪子(站在海量包上+簡(jiǎn)單語(yǔ)法+npm=快速)
使用Node.js里的nan自己包裝c/c++輪子
絕大部分需求都可以滿(mǎn)足了
2)架構層面能解決的
業(yè)務(wù)邊界、模塊拆分、面向服務(wù)
mq、rpc、cache
運維、監控、自動(dòng)化
稍微解釋一下
首先,架構和是不是Node.js寫(xiě)的沒(méi)關(guān)系,是獨立的
其次,架構師常用的東東有足夠的Node.js模塊支持,比如mq,像rabbitmq有比較好的node模塊支持,像rpc里thrift、grpc、tchannel支持的都不錯,我們使用的senecajs,比如redis,我們使用的ioredis,后面做ha都是一樣的。
合適的場(chǎng)景用合適的東西
有很多東西是Node.js不擅長(cháng),又不在架構范疇里的,咋辦?
3)如實(shí)在不夠,java補(嚴格點(diǎn),應該叫其他語(yǔ)言補) - 比如復雜excel生成 - 比如apns推送(go做其實(shí)也很好,不過(guò)除了我,沒(méi)人能維護。。。)
但凡是java或其他語(yǔ)言里比較成熟的庫,可以作為獨立服務(wù)使用的,都可以做Node.js的支持。避免過(guò)多的時(shí)間用在早輪子上,影響開(kāi)發(fā)進(jìn)度
執行效率:
同樣不優(yōu)化,性能比大部分語(yǔ)言好
開(kāi)發(fā)效率:
Node.js本身比較簡(jiǎn)單,開(kāi)發(fā)效率還是比較高的
完善的生態(tài),比如測試、工具、npm大量模塊
缺少rails一樣的大殺器
scaffold腳手架
orm太弱
Node.js的web開(kāi)發(fā)框架express、koa等,簡(jiǎn)單,小巧,精致,缺點(diǎn)是集成度不夠,目前已有的mean或yo或sails等總有某種方面的不滿(mǎn)意
所以我們需要做的
固化項目結構
限定orm
自定義腳手架
偏偏Node.js提供了2點(diǎn),可以讓你30分鐘寫(xiě)一個(gè)腳手架
cli命令模塊,編寫(xiě)非常容易
基于js的模板引擎(知名的30+)
api服務(wù)
前端(moa-frontend)
SDK(OAuth Provider)
輔助開(kāi)發(fā)cli工具
使用0.10.38,開(kāi)發(fā)moajs框架
express/mongodb
pm2部署
阿里云的slb負載
alinode監控
前后端分離
moa-api
moa-frontend
moa-h5(未能用)
上redis緩存
上rabbitmq
上senaca作為rpc
上kong作為api gateway(todo)
上consul做服務(wù)發(fā)現和配置(todo)
上elk作為日志分析處理(todo)
使用docker compose作為本地開(kāi)發(fā)環(huán)境(todo)
線(xiàn)上docker(todo)
技術(shù)棧更新
nodejs 4.x(預計今年6月份)
koa(generator/co)
es6/es7(babel)
4.x在內存和性能上都有非常大的提升,新的語(yǔ)言特性上,異步流程和語(yǔ)法上都需要學(xué)習,故不急于升級,待人才梯隊完善
目前的做法是小步快走
一次只上一樣新技術(shù)
形成梯隊,即可準備上新東西
善用npm,實(shí)現3化
模塊化
最小化
服務(wù)化
1)小而美的哲學(xué)
2)從LAMP到MEAN
3)異步流程控制
4)Node.js Web開(kāi)發(fā)
5)Node.js 模塊開(kāi)發(fā)
時(shí)間原因,接下來(lái)稍微介紹一下MEAN
"Small is beautiful"是Unix哲學(xué)9條里的第一條,但對Node.js來(lái)說(shuō),它實(shí)在是再合適不過(guò)了
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架構
MEAN是一個(gè)Javascript平臺的現代Web開(kāi)發(fā)框架總稱(chēng),它是MongoDB + Express +AngularJS + NodeJS 四個(gè)框架的第一個(gè)字母組合。它與傳統LAMP一樣是一種全套開(kāi)發(fā)工具的簡(jiǎn)稱(chēng)。
從我的角度看
mysql用mongodb替換,nosql里最像rdbms的,從開(kāi)發(fā)和性能都是有優(yōu)勢的(老畢已經(jīng)講過(guò)了)
angular的出現是一個(gè)時(shí)代,ioc,雙向綁定,指令等都曾讓無(wú)數熱血沸騰
nodejs提供了完全的生態(tài)和工具鏈,你要的它基本都有,感謝npm,早些年nodejs的性能甩php幾條街的
express作為nodejs示范項目,它非常精簡(jiǎn),是比較合適的web框架
我為什么選擇MEAN架構?
成熟、穩定,簡(jiǎn)單,有問(wèn)題我們能cover住,所以我們選了nodejs
把握趨勢,以后nodejs的前景非??春?,尤其先后端統一,全棧方向
在架構上可以屏蔽可能風(fēng)險,不孤注一擲,也不會(huì )一葉障目,合理的使用其他語(yǔ)言,只要每個(gè)功能都以服務(wù)出現,至于它是什么語(yǔ)言寫(xiě)的,并不重要
招人成本的性?xún)r(jià)比相對較高,技術(shù)棧新,容易吸引人才
最重要的一件事兒,是當有問(wèn)題的時(shí)候,有人能cover住,在創(chuàng )業(yè)初期這是最最重要的事兒。
我的一篇爆款文章《Node.js最新Web技術(shù)棧(2015年5月)》https://cnodejs.org/topic/55651bf07d4c64752effb4b1 講的就是我們用的技術(shù)棧
js流程控制的演進(jìn)過(guò)程,分以下5部分
1) 回調函數Callbacks
2) 異步JavaScript
3) Promise/a+規范
4) 生成器Generators/ yield(es6)
5) Async/ await(es7)

目前所有版本都支持Promise/a+規范
目前Node.js 4.0 + 支持Generators/ yield
目前不支持ES7里的Async/await,但可以通過(guò)babel實(shí)現
整體來(lái)說(shuō),對異步流程控制解決的還是比較好的。
詳見(jiàn)Node.js最新技術(shù)棧之Promise篇
Node.js Web開(kāi)發(fā)
express、koa
restify、hapi
其他框架sails、meteor
各種類(lèi)型web開(kāi)發(fā)都支持的,一般我們采用非restful的使用express、koa更簡(jiǎn)單
如果是純r(jià)estful,可以采用restify、hapi
另外還有快速模擬api的json-server,對rest支持超方便
Node.js模塊開(kāi)發(fā)
普通模塊
cli
腳手架scaffold
c/c++ addons
普通模塊和cli模塊只是差package.json里的
"preferGlobal": "true", "bin": { "kp": "kp.js" },腳手架scaffold = cli + 模板生成,在Node.js里這2點(diǎn)都非常容易
在Node.js里寫(xiě)c/c++擴展,有nan抽象層,其他就看大家的c/c++水平了
創(chuàng )業(yè)公司有很多可變性,要做的系統也無(wú)數,如何保證業(yè)務(wù)系統的邊界是非常難的,我們其實(shí)走了很多彎路,圖-稍后補


當需求和ue定下來(lái)之后,就開(kāi)始編寫(xiě)靜態(tài)api,這樣app、h5、前端就可以使用靜態(tài)api完成功能,而后端也可以以靜態(tài)api為標準來(lái)實(shí)現,整體效率還是比較高的。
另外還有基于api生成http請求的思考(未完成)


api的最佳實(shí)踐
http://developer.github.com/v3/ (嚴格的restful)
微博API (可讀性強,相對比較傳統)
我們采用的微博API類(lèi)似的,約定結構也是類(lèi)似的
res.api is an express middleware for render json api , it convention over api format like this :
{ data: { }, status: { code : x, msg : 'some message' }}詳見(jiàn)客戶(hù)端 API 開(kāi)發(fā)總結

和java開(kāi)發(fā)里的目錄結構類(lèi)似,該分層的分層,適當的按照express/koa增加中間件、路由等目錄,便于開(kāi)發(fā)
使用npmjs的private私有模塊(目前做法)
使用npm的本地模塊開(kāi)發(fā)方法(測試和部署都非??欤?/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開(kāi)發(fā)里,寫(xiě)了moajs生成器,類(lèi)似于rails
moag order name:string password:string
其他開(kāi)發(fā),如iOS開(kāi)發(fā)里模型校驗非常煩,于是寫(xiě)了一個(gè)json2objc命令行工具,讀取json,生成oc代碼,可以節省不少時(shí)間
前端:moa-frontend
public下面的采用nginx做反向代理
其他的采用express+jade精簡(jiǎn)代碼(ajax與后端交互)
后端:moa-api
即上面講的生成器scaffold
技術(shù)棧
express
jade
bootstrap、bootstrap-table
jquery
gulp
nginx
技術(shù)棧
Features
自動(dòng)加載路由
支持mongodb配置
集成mongoosedao,快速寫(xiě)crud等dao接口
自帶用戶(hù)管理
使用jsonwebtoken做用戶(hù)鑒權
支持migrate測試
支持mocha測試
默認集成res.api,便于寫(xiě)接口
集成supervisor,代碼變動(dòng),自動(dòng)重載
gulp自動(dòng)監控文件變動(dòng),跑測試
gulp routes生成路由說(shuō)明
使用log4js記錄日志
從開(kāi)發(fā)效果上看,還是非??斓?,非常穩定的
更多參見(jiàn)我寫(xiě)的《Moajs框架演進(jìn)之路》
《從0開(kāi)始寫(xiě)Node.js框架》
grunt/gulp/fis/webpack
bower/spm/npm
tdd/bdd cucumber/mocha
standard
babel/typescript/coffee
html/css/js(基礎)
jQuery、jQuery-ui,Extjs(曾經(jīng)流行)
Backbone(mvc),Angularjs、Vuejs(當前流行)
React組件化(未來(lái)趨勢)、Vuejs
Vuejs綜合Angular和React的優(yōu)點(diǎn),應該是下一個(gè)流行趨勢
Hybrid混搭開(kāi)發(fā)是指使用html5技術(shù)開(kāi)發(fā)的跨瀏覽器應用,并最終可以將html5.js.css等打包成apk和ipa包的開(kāi)發(fā)方式。它也可以上傳到應用商店,提供給移動(dòng)設備進(jìn)行安裝。它最大的好處是通過(guò)h5開(kāi)發(fā)一次,就可以在多個(gè)平臺上安裝。
未來(lái)的2點(diǎn)
js一統天下(nodejs做后端,傳統web和h5使用javasctipt,更智能的工具如gulp,更簡(jiǎn)單的寫(xiě)法如coffeescript等)
h5大行其道(網(wǎng)速變快,硬件內存增長(cháng))
這個(gè)大部分都清楚,不多說(shuō)

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

一樣是延續瀏覽器做文章,不過(guò)這次把頁(yè)面生成各個(gè)PC平臺的可執行文件
目前比較火的編輯器atom和vscode都是基于Electron打包的。
React的出現影響最大的是jsx的出現,解決了長(cháng)久以來(lái)組件化的問(wèn)題,
我們反復的折騰js,依然無(wú)法搞定
我們嘗試OO,比如extjs
我們最終還是找個(gè)中間格式j(luò )sx
單純的React只是view層面的,還不足以應用,于是又有Redux
核心概念:Actions、Reducers 和 Store,簡(jiǎn)單點(diǎn)說(shuō)就是狀態(tài)控制
然后再結合打包加殼,變成app或可執行文件
iOS、Android上用Cordova
PC上使用Electron
總結
組件定義好(React)
控制好組件之間的狀態(tài)切換(Redux)
打包或加殼(Cordova or Electron)
這部分其實(shí)組件化了前端,那么能否用這樣的思想來(lái)組件化移動(dòng)端呢?
A framework for building native apps with React. http://facebook.github.io/react-native/
簡(jiǎn)單點(diǎn)說(shuō),就是用React的語(yǔ)法來(lái)組件化iOS或Android SDK。
它們都在告訴我們,你們以后就玩這些組件就好了,你不需要知道復雜的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構建
使用React(視圖) + Redux(控制邏輯)
使用Electron加殼打包
親,你看到未來(lái)了么?
講了node工具,前端4階段,hybrid,各種跨平臺,目前就是為了介紹Node全棧的各種可能,下面講一下如何能做到Node全棧?
全棧核心
后端不會(huì )的ui(界面相關(guān))
前端不會(huì )的db(業(yè)務(wù)相關(guān))
只要打通這2個(gè)要點(diǎn),其他就比較容易了
做后端的人
對數據庫是比較熟悉,無(wú)論mongodb,還是mysql、postgres
對前端理解比較弱,會(huì )基本的html,css,模板引擎等比較熟悉
4階段循序漸進(jìn),build與工具齊飛
前端開(kāi)發(fā)4階段,我的感覺(jué)是按照順序,循序漸進(jìn)
html/css/js(基礎)
jQuery、jQuery-ui,Extjs(曾經(jīng)流行)
Backbone,Angularjs(當前流行)、Vuejs
React(未來(lái)趨勢)、Vuejs
從前端往后端轉,api接口非常容易學(xué)會(huì ),像express、koa這類(lèi)框架大部分人一周就能學(xué)會(huì ),最難的是對db、er模型的理解,說(shuō)直白點(diǎn),還是業(yè)務(wù)需求落地的理解
我們來(lái)想想一般的前端有什么技能?
html
css(兼容瀏覽器)
js會(huì )點(diǎn)(可能更多的是會(huì )點(diǎn)jquery)
ps切圖
firebug和chrome debuger會(huì )的人都不太多
用過(guò)幾個(gè)框架,大部分人是僅僅會(huì )用
英語(yǔ)一般
svn/git會(huì )一點(diǎn)
那么他們如果想在前端領(lǐng)域做的更深有哪些難點(diǎn)呢?
基礎:oo,dp,命令,shell,構建等
編程思想上的理解(mvc、ioc,規約等)
區分概念
外圍驗收,如h5和hybird等
追趕趨勢,如何學(xué)習新東西
以上皆是痛點(diǎn)。
所以比較好的辦法
玩轉npm、gulp這樣的前端工具類(lèi)(此時(shí)還是前端)
使用node做前后端分離(此時(shí)還是前端)
express、koa這類(lèi)框架
jade、ejs等模板引擎
nginx
玩轉【后端】異步流程處理(promise/es6的(generator|yield)/es7(async|await))
玩轉【后端】mongodb、mysql對應的node模塊
從我們的經(jīng)驗看,這樣是比較靠譜的。
https://github.com/moajs/moa-frontend
就是最簡(jiǎn)單前后端分離,里面沒(méi)有任何和db相關(guān),
技術(shù)棧
express
jade
bootstrap,bootstrap-table
jquery
gulp
nginx
一般的前端都非常容易學(xué)會(huì ),基本2周就已經(jīng)非常熟練了,我的計劃是半年后,讓他們接觸【異步流程處理】和【數據庫】相關(guān)內容,學(xué)習后端代碼,就可以全棧了
移動(dòng)端分
native原生開(kāi)發(fā)
hybrid混搭式開(kāi)發(fā)
原生開(kāi)發(fā)就是iOS用oc/swift,Android用java或scala等,就算偶爾嵌入webview,能玩js的機會(huì )也非常好少
所以移動(dòng)端轉全棧的方法,最好是從cordova(以前叫phonegap)開(kāi)始做hybrid開(kāi)發(fā)。
只要關(guān)注www目錄里的h5即可,比較簡(jiǎn)單
如果h5不足以完成的情況下,可以編寫(xiě)cordova插件,即通過(guò)插件讓js調用原生sdk里功能
cordova的cli可以通過(guò)npm安裝,學(xué)習npm的好方法
學(xué)習gulp構建工具
只要入了h5的坑,其實(shí)就非常好辦了。
然后h5、zeptojs、iscroll、fastclick等
然后微信常用的,如weui、vux(vue+weui)、jmui(react+weui)
然后可以玩點(diǎn)框架,比如jquery mobile,sencha touch
然后可以玩點(diǎn)高級貨,ionicframework(基于angularjs、cordova)
然后前端4階段,依次打怪升級
然后node
這個(gè)基本上是我走的路,從2010年寫(xiě)iOS、做phonegap(當時(shí)是0.9.3)、一路走到現在的總結吧
可能是一場(chǎng)春夢(mèng),也可能一個(gè)變革機遇,我們更相信它是變革機遇,拭目以待吧
謝謝大家
有的,未來(lái)swift和lua是有可能的。swift的語(yǔ)法和性能上有很大優(yōu)勢,lua在openresty的推動(dòng)下也有機會(huì ),不過(guò)沒(méi)有swift大
像WebAssembly之類(lèi)的就不太看好了
如果是的話(huà)誰(shuí)負責編寫(xiě)?你們目前已經(jīng)是一個(gè)人分模塊從前端寫(xiě)到后端了嗎?
目前沒(méi)做到文檔即靜態(tài)api,所以目前是直接提供json和部分json-server
負責是后端開(kāi)發(fā)的leader在寫(xiě),他的進(jìn)度會(huì )比正常開(kāi)發(fā)要早一周左右
目前不是一個(gè)人寫(xiě)所有的前后端,團隊成立不久,天津Node.js會(huì )的不多,所以還是前后端分離。但是通過(guò)moa-frontend可以讓前端了解express等后端知識,適當的時(shí)候會(huì )給予機會(huì ),前端轉后端
nodejs里json-server 比較好
我其實(shí)很想圍繞靜態(tài)api,寫(xiě)各種請求的生成器,只要api出來(lái),文檔和各平臺的http請求代碼就生成出來(lái),同時(shí)可以對正式api進(jìn)行壓測,可惜目前還沒(méi)精力寫(xiě)
足夠輕量級,少選大框架,做好前端該有的優(yōu)化
注意touch和click的區別,比如fastclick或zeptojs的tap手勢
Chrome profile(css3動(dòng)畫(huà))
使用weinre真機測試
我們團隊還是傾向于分工專(zhuān)業(yè)化,各個(gè)服務(wù)粒度非常小,便于輪崗、還有就是可以為以后像google那樣代碼開(kāi)放做準備
但是有很多情況下,是需要有機動(dòng)的突擊隊的(尤其是創(chuàng )業(yè)時(shí)期),這樣可以隨便組合,另外就是全棧為remote提供了更多便利性。
可以嘗試一下淘寶系的h5虛擬化,鬼道曾經(jīng)在as大會(huì )上講過(guò)的,我們目前還沒(méi)能力做這么深層次的優(yōu)化
1)你問(wèn)的不是Node.js,而是Node.js要操作的數據庫。 2)耗性能的計算可以在架構上平衡的 - 如果可以延時(shí),mq就可以了 - 如果是非延時(shí)情況,可以采用其他語(yǔ)言編寫(xiě)對應服務(wù),沒(méi)必要非要一定要Node.js 3)我們目前的場(chǎng)景,還沒(méi)有在計算遇到瓶頸
語(yǔ)義上更加清晰
整個(gè)返回的json就只有data和status,如果status.code!=0,我取msg就好了,如果等于0,處理data數據
這種設計不見(jiàn)得多好,不過(guò)結構清晰,對于開(kāi)發(fā)者來(lái)說(shuō),是比較容易接受的
聯(lián)系客服