欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
全棧工程師之路

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

高可用架構專(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明星講師[呲牙][呲牙]

1.1. 主要內容

  1. Why Node.js ?

    • 歷史

    • 槽點(diǎn)

    • 架構平衡和選擇

    • 企業(yè)級

  2. 我眼中的Node.js核心

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

  4. 全棧 or 全爛 ?

    • 工具鏈

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

    • Hybrid開(kāi)發(fā)

    • 跨平臺

    • 全棧的可能

  5. 未來(lái)

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

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

1.2. 講師介紹

桑世龍,目前在天津創(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ù)架構 + 招人工作

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

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

以前?現在?

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 項目領(lǐng)導人 TJ Fontaine 逐步解除核心身份并離開(kāi) 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è)長(cháng)期支持版本(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 開(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)非常穩定了,可以大規模使用

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

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

  • event-driven

  • non-blocking I/O

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

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

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

  • 第一、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)炫耀

2.5. 大事兒記

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

2.5.1. 企業(yè)級

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

2.5.2. es && babel

  • 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í)標準

2.5.3. 微軟請求 Node.js 支持 ChakraCore

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

蔡偉小兄弟的查克拉benchmark的對比

基本結論是 V8 ES5 >> 查克拉 ES6 > 查克拉 ES5 > V8 ES6

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

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

  • 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補

2.7. 黑一下go語(yǔ)言吧

go不著(zhù)

  • 沒(méi)有好的包管理

  • 沒(méi)有好的調試工具

  • 語(yǔ)法較難

適合高端人群,但對團隊開(kāi)發(fā)是有門(mén)檻的,不適用大部分團隊

2.8. 選擇

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

2.8.1. 1)可難可易

  • 可以采用面向過(guò)程

  • 可以面向對象

  • 可以函數式

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

對于從0開(kāi)始的團隊來(lái)講,可以先面向過(guò)程、然后隨著(zhù)團隊的成熟度,一點(diǎn)一點(diǎn)增加難度

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

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

  • 規范化 standard、各種lint、hint

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

  • 生成器 yo等

  • 包管理工具npm足夠簡(jiǎn)單易用

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

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

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

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

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

2.8.4. 4)總結

  • 可以簡(jiǎn)單,可以難

  • 可以快、也可以慢

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

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

2.9. 架構平衡

先說(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)度

2.10. 效率問(wè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+)

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

  • api服務(wù)

  • 前端(moa-frontend)

  • SDK(OAuth Provider)

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

2.12. 目前進(jìn)度

  • 使用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ù)化

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

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

  • 2)從LAMP到MEAN

  • 3)異步流程控制

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

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

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

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

"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.

3.2. 從LAMP到MEAN

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ù)棧

3.3. 異步流程控制

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篇

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

  • 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支持超方便

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

  • 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++水平了

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

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

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

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

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

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

4.3. 3、api約定

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ā)總結

4.4. 4、約定結構

和java開(kāi)發(fā)里的目錄結構類(lèi)似,該分層的分層,適當的按照express/koa增加中間件、路由等目錄,便于開(kāi)發(fā)

4.5. 5、使用npm模塊化

  • 使用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

4.6. 6、編寫(xiě)生成器

在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í)間

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

  • 前端:moa-frontend

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

    • 其他的采用express+jade精簡(jiǎn)代碼(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,快速寫(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記錄日志

4.7.4. 4)總結

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

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

4.8. 其他

  • 《從0開(kāi)始寫(xiě)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. 前端開(kāi)發(fā)4階段

  • 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è)流行趨勢

5.3. Hybrid開(kāi)發(fā)

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))

5.4. 跨平臺

5.4.1. 1)c/s架構到b/s架構

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

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

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

5.4.3. 3)PC端:繼續加殼

一樣是延續瀏覽器做文章,不過(guò)這次把頁(yè)面生成各個(gè)PC平臺的可執行文件

  • node-webkit is renamed NW.js

  • Electron - Build cross platform desktop apps with web technologies

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

5.4.4. 4) 組件化:統一用法

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)端呢?

再看react-native

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是什么

5.4.5. 5)當下流行玩法

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)了么?

5.4.6. 6)總結

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

5.5. 如何全棧?

全棧核心

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

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

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

5.5.1. 1)從后端轉

做后端的人

  • 對數據庫是比較熟悉,無(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

5.5.2. 2)從前端轉

從前端往后端轉,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é)習后端代碼,就可以全棧了

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

移動(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)、一路走到現在的總結吧

6. Part 5:未來(lái)

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

謝謝大家

7. Q & A

7.1. 問(wèn)題一:在全棧的語(yǔ)言選擇上,除了node.js,是否還考慮過(guò)其他語(yǔ)言?

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

像WebAssembly之類(lèi)的就不太看好了

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

如果是的話(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ì ),前端轉后端

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

nodejs里json-server 比較好

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

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

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

  • 注意touch和click的區別,比如fastclick或zeptojs的tap手勢

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

  • 使用weinre真機測試

我的h5實(shí)踐

7.5. 問(wèn)題五:如果都全棧了,當前你們團隊是如何分工的?

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

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

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

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

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

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

7.8. 問(wèn)題八:關(guān)于A(yíng)PI返回格式那里,對于status為什么不打平了把code和message放出來(lái)?這么設定有什么好處么?

語(yǔ)義上更加清晰

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

這種設計不見(jiàn)得多好,不過(guò)結構清晰,對于開(kāi)發(fā)者來(lái)說(shuō),是比較容易接受的


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

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久