精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
全棧工程師之路

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

高可用架構專用

原文[高可用架構]

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和慶豐校長的整理,非常嚴謹,比我講的要好,另外感謝霍老板封我是StuQ明星講師[呲牙][呲牙]

1.1. 主要內容

  1. Why Node.js ?

    • 歷史

    • 槽點

    • 架構平衡和選擇

    • 企業級

  2. 我眼中的Node.js核心

  3. 快速開發實踐

  4. 全棧 or 全爛 ?

    • 工具鏈

    • 前端開發4階段

    • Hybrid開發

    • 跨平臺

    • 全棧的可能

  5. 未來

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

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

1.2. 講師介紹

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

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

已經7歲的Node.js,你還熟悉么?

以前?現在?

2.1. 回顧一下2015年Node.js的發展歷史

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

2.1.1. Q1(1季度)

  • IO.js 1.0.0 發布

  • Joyent 推進建立 Node.js 基金會

    • 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 項目領導人 TJ Fontaine 逐步解除核心身份并離開 Joyent 公司

    • A changing of the guard in Nodeland.

  • Node.js 和 io.js 在 Node 基金會下合并情況

2.1.3. Q3(3季度)

  • 4.0 版本發布,即新的 1.0 版本

2.1.4. Q4(4季度)

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

  • Apigee,RisingStack 和 Yahoo 加入 Node.js 基金會

  • Node Interactive

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

2.2. 版本帝?

去年

  • 從v0.10.35 開始

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

  • 2.x(io.js)

  • 3.x(io.js)

  • 2015年09月Node.js基金會已發布Node.js V4.0版 與io.js合并后的第一個版本

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

  • 年底發布到4.2.4 && 5.4.0

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

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

  • v5.9.0 Stable(穩定版本)

整體來說趨于穩定

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

  • 發布了LTS版本,意味著api穩定

  • 快速發版本,很多人吐槽這個,其實換個角度看,這也是社區活躍的一個體現,但如果大家真的看CHANGELOG,其實都是小改進,而且是邊邊角角的改進,也就是說nodejs的core(核心)已經非常穩定了,可以大規模使用

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

Node.js與生俱來的2個特性

  • event-driven

  • non-blocking I/O

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

異步已經不是明顯優勢了

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

  • 第一、callback hell問題,目前已經很好的解決了,promise/generator/async后面會講

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

官方說

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

以前我們總是喜歡拿異步說事兒,現在我們拿Node.js的強大的生態來炫耀

2.5. 大事兒記

下面介紹點Node.js的大事兒記

2.5.1. 企業級

Node.js基金會的創始成員包括Joyent、IBM、Paypal、微軟、Fidelity和Linux基金會

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

對于企業級開發,Node.js是足夠的,無論從性能、安全、穩定性等都是非常棒的。

空弦科技做的是基于云倉儲的SaaS服務,給中小賣家提供服務,核心系統是進銷存+訂單池+WMS。目前來看不存在任何問題,稍后會講我們為啥選擇Node.js

2.5.2. es && babel

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

http://babeljs.io/

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

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

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

這是node追逐的事實標準

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

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

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

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

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

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

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

Node.js招不到,好多都是從java轉的,前端也不好找,好多也是從java轉的,我們相當于從0開始組建團隊

  • 2)開發速度

創業公司,5分鐘要造火箭。。。大家都懂

所以讓開發快速進入狀態,提高開發速度,對我們來說至關重要

  • 3)穩定

在沒有專業運維人員的情況下,如何保證系統可用、穩定

于是就引出了我認為的Node.js的好處

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

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

  • 3)有足夠多的選擇和架構的平衡

  • 4)如實在不夠,java補

2.7. 黑一下go語言吧

go不著

  • 沒有好的包管理

  • 沒有好的調試工具

  • 語法較難

適合高端人群,但對團隊開發是有門檻的,不適用大部分團隊

2.8. 選擇

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

2.8.1. 1)可難可易

  • 可以采用面向過程

  • 可以面向對象

  • 可以函數式

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

對于從0開始的團隊來講,可以先面向過程、然后隨著團隊的成熟度,一點一點增加難度

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

  • 測試相關 tdd/bdd/測試覆蓋率

  • 規范化 standard、各種lint、hint

  • 構建相關 gulp、grunt、webpack,大量插件

  • 生成器 yo等

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

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

2.8.3. 3)特定場景的快速

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

metetor模糊了服務端和客戶端,是同構的典型應用,對于實時場景是非常高效的。

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

2.8.4. 4)總結

  • 可以簡單,可以難

  • 可以快、也可以慢

  • 可以開發大型軟件

還有一個問題就是如果以上不滿足咋辦?這時就需要架構平衡了

2.9. 架構平衡

先說技術選型的3個思考點

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

  • 如果語言層面搞不定,那就架構層面做

  • 如果架構層面也搞不定,這東西就不能用了

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

我們很坦然的面對Node.js的優點和缺點

  • 1)語言層面能解決的

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

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

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

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

  • 2)架構層面能解決的

    • 業務邊界、模塊拆分、面向服務

    • mq、rpc、cache

    • 運維、監控、自動化

稍微解釋一下

  • 首先,架構和是不是Node.js寫的沒關系,是獨立的

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

  • 合適的場景用合適的東西

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

3)如實在不夠,java補(嚴格點,應該叫其他語言補) - 比如復雜excel生成 - 比如apns推送(go做其實也很好,不過除了我,沒人能維護。。。)

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

2.10. 效率問題?

執行效率:

  • 同樣不優化,性能比大部分語言好

開發效率:

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

  • 完善的生態,比如測試、工具、npm大量模塊

缺少rails一樣的大殺器

  • scaffold腳手架

  • orm太弱

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

所以我們需要做的

  • 固化項目結構

  • 限定orm

  • 自定義腳手架

偏偏Node.js提供了2點,可以讓你30分鐘寫一個腳手架

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

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

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

  • api服務

  • 前端(moa-frontend)

  • SDK(OAuth Provider)

  • 輔助開發cli工具

2.12. 目前進度

  • 使用0.10.38,開發moajs框架

    • express/mongodb

    • pm2部署

    • 阿里云的slb負載

    • alinode監控

  • 前后端分離

    • moa-api

    • moa-frontend

    • moa-h5(未能用)

  • 上redis緩存

  • 上rabbitmq

  • 上senaca作為rpc

  • 上kong作為api gateway(todo)

  • 上consul做服務發現和配置(todo)

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

  • 使用docker compose作為本地開發環境(todo)

  • 線上docker(todo)

技術棧更新

  • nodejs 4.x(預計今年6月份)

  • koa(generator/co)

  • es6/es7(babel)

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

目前的做法是小步快走

  • 一次只上一樣新技術

  • 形成梯隊,即可準備上新東西

  • 善用npm,實現3化

    • 模塊化

    • 最小化

    • 服務化

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

  • 1)小而美的哲學

  • 2)從LAMP到MEAN

  • 3)異步流程控制

  • 4)Node.js Web開發

  • 5)Node.js 模塊開發

時間原因,接下來稍微介紹一下MEAN

3.1. 小而美的哲學

"Small is beautiful"是Unix哲學9條里的第一條,但對Node.js來說,它實在是再合適不過了

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是一個Javascript平臺的現代Web開發框架總稱,它是MongoDB + Express +AngularJS + NodeJS 四個框架的第一個字母組合。它與傳統LAMP一樣是一種全套開發工具的簡稱。

從我的角度看

  • mysql用mongodb替換,nosql里最像rdbms的,從開發和性能都是有優勢的(老畢已經講過了)

  • angular的出現是一個時代,ioc,雙向綁定,指令等都曾讓無數熱血沸騰

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

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

我為什么選擇MEAN架構?

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

  • 把握趨勢,以后nodejs的前景非常看好,尤其先后端統一,全棧方向

  • 在架構上可以屏蔽可能風險,不孤注一擲,也不會一葉障目,合理的使用其他語言,只要每個功能都以服務出現,至于它是什么語言寫的,并不重要

  • 招人成本的性價比相對較高,技術棧新,容易吸引人才

最重要的一件事兒,是當有問題的時候,有人能cover住,在創業初期這是最最重要的事兒。

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

3.3. 異步流程控制

js流程控制的演進過程,分以下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,但可以通過babel實現

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

詳見Node.js最新技術棧之Promise篇

3.4. Node.js Web開發

  • Node.js Web開發

    • express、koa

    • restify、hapi

    • 其他框架sails、meteor

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

如果是純restful,可以采用restify、hapi

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

3.5. Node.js 模塊開發

  • Node.js模塊開發

    • 普通模塊

    • cli

    • 腳手架scaffold

    • c/c++ addons

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

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

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

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

4. Part 3:快速開發實踐

4.1. 1、業務邊界優化

創業公司有很多可變性,要做的系統也無數,如何保證業務系統的邊界是非常難的,我們其實走了很多彎路,圖-稍后補

4.2. 2、靜態api理論

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

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

4.3. 3、api約定

api的最佳實踐

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

  • 微博API (可讀性強,相對比較傳統)

我們采用的微博API類似的,約定結構也是類似的

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 開發總結

4.4. 4、約定結構

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

4.5. 5、使用npm模塊化

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

  • 使用npm的本地模塊開發方法(測試和部署都非??欤?/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開發里,寫了moajs生成器,類似于rails

moag order name:string password:string

其他開發,如iOS開發里模型校驗非常煩,于是寫了一個json2objc命令行工具,讀取json,生成oc代碼,可以節省不少時間

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

技術棧

  • express

  • jade

  • bootstrap、bootstrap-table

  • jquery

  • gulp

  • nginx

4.7.3. 3)moa-api

技術棧

Features

  • 自動加載路由

  • 支持mongodb配置

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

  • 自帶用戶管理

  • 使用jsonwebtoken做用戶鑒權

  • 支持migrate測試

  • 支持mocha測試

  • 默認集成res.api,便于寫接口

  • 集成supervisor,代碼變動,自動重載

  • gulp自動監控文件變動,跑測試

  • gulp routes生成路由說明

  • 使用log4js記錄日志

4.7.4. 4)總結

從開發效果上看,還是非??斓?,非常穩定的

更多參見我寫的《Moajs框架演進之路》

4.8. 其他

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

5. Part 4:全棧 or 全爛 ?

5.1. Node.js相關工具

  • grunt/gulp/fis/webpack

  • bower/spm/npm

  • tdd/bdd cucumber/mocha

  • standard

  • babel/typescript/coffee

5.2. 前端開發4階段

  • html/css/js(基礎)

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

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

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

Vuejs綜合Angular和React的優點,應該是下一個流行趨勢

5.3. Hybrid開發

Hybrid混搭開發是指使用html5技術開發的跨瀏覽器應用,并最終可以將html5.js.css等打包成apk和ipa包的開發方式。它也可以上傳到應用商店,提供給移動設備進行安裝。它最大的好處是通過h5開發一次,就可以在多個平臺上安裝。

未來的2點

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

  • h5大行其道(網速變快,硬件內存增長)

5.4. 跨平臺

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

這個大部分都清楚,不多說

5.4.2. 2)移動端:加殼

在瀏覽器上做文章,把頁面生成各個移動端的app文件

5.4.3. 3)PC端:繼續加殼

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

  • node-webkit is renamed NW.js

  • Electron - Build cross platform desktop apps with web technologies

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

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

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

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

  • 我們嘗試OO,比如extjs

  • 我們最終還是找個中間格式jsx

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

核心概念:Actions、Reducers 和 Store,簡單點說就是狀態控制

然后再結合打包加殼,變成app或可執行文件

  • iOS、Android上用Cordova

  • PC上使用Electron

總結

  • 組件定義好(React)

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

  • 打包或加殼(Cordova or Electron)

這部分其實組件化了前端,那么能否用這樣的思想來組件化移動端呢?

再看react-native

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

簡單點說,就是用React的語法來組件化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.

技術點

  • 使用Node.js模塊

  • 使用Webpack構建

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

  • 使用Electron加殼打包

親,你看到未來了么?

5.4.6. 6)總結

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

5.5. 如何全棧?

全棧核心

  • 后端不會的ui(界面相關)

  • 前端不會的db(業務相關)

只要打通這2個要點,其他就比較容易了

5.5.1. 1)從后端轉

做后端的人

  • 對數據庫是比較熟悉,無論mongodb,還是mysql、postgres

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

4階段循序漸進,build與工具齊飛

前端開發4階段,我的感覺是按照順序,循序漸進

  • html/css/js(基礎)

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

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

  • React(未來趨勢)、Vuejs

5.5.2. 2)從前端轉

從前端往后端轉,api接口非常容易學會,像express、koa這類框架大部分人一周就能學會,最難的是對db、er模型的理解,說直白點,還是業務需求落地的理解

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

  • html

  • css(兼容瀏覽器)

  • js會點(可能更多的是會點jquery)

  • ps切圖

  • firebug和chrome debuger會的人都不太多

  • 用過幾個框架,大部分人是僅僅會用

  • 英語一般

  • svn/git會一點

那么他們如果想在前端領域做的更深有哪些難點呢?

  • 基礎:oo,dp,命令,shell,構建等

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

  • 區分概念

  • 外圍驗收,如h5和hybird等

  • 追趕趨勢,如何學習新東西

以上皆是痛點。

所以比較好的辦法

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

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

    • express、koa這類框架

    • jade、ejs等模板引擎

    • nginx

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

  • 玩轉【后端】mongodb、mysql對應的node模塊

從我們的經驗看,這樣是比較靠譜的。

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

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

技術棧

  • express

  • jade

  • bootstrap,bootstrap-table

  • jquery

  • gulp

  • nginx

一般的前端都非常容易學會,基本2周就已經非常熟練了,我的計劃是半年后,讓他們接觸【異步流程處理】和【數據庫】相關內容,學習后端代碼,就可以全棧了

5.5.3. 3)從移動端轉

移動端分

  • native原生開發

  • hybrid混搭式開發

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

所以移動端轉全棧的方法,最好是從cordova(以前叫phonegap)開始做hybrid開發。

  • 只要關注www目錄里的h5即可,比較簡單

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

  • cordova的cli可以通過npm安裝,學習npm的好方法

  • 學習gulp構建工具

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

  • 然后h5、zeptojs、iscroll、fastclick等

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

  • 然后可以玩點框架,比如jquery mobile,sencha touch

  • 然后可以玩點高級貨,ionicframework(基于angularjs、cordova)

  • 然后前端4階段,依次打怪升級

  • 然后node

這個基本上是我走的路,從2010年寫iOS、做phonegap(當時是0.9.3)、一路走到現在的總結吧

6. Part 5:未來

可能是一場春夢,也可能一個變革機遇,我們更相信它是變革機遇,拭目以待吧

謝謝大家

7. Q & A

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

有的,未來swift和lua是有可能的。swift的語法和性能上有很大優勢,lua在openresty的推動下也有機會,不過沒有swift大

像WebAssembly之類的就不太看好了

7.2. 問題二:請教桑老師:剛才你說的并發開發流程中靜態api指的是api文檔?

如果是的話誰負責編寫?你們目前已經是一個人分模塊從前端寫到后端了嗎?

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

負責是后端開發的leader在寫,他的進度會比正常開發要早一周左右

目前不是一個人寫所有的前后端,團隊成立不久,天津Node.js會的不多,所以還是前后端分離。但是通過moa-frontend可以讓前端了解express等后端知識,適當的時候會給予機會,前端轉后端

7.3. 問題三:第一貴司在開發協作中提到了靜態api,請問是不是有什么比較好的工具可以推薦?

nodejs里json-server 比較好

我其實很想圍繞靜態api,寫各種請求的生成器,只要api出來,文檔和各平臺的http請求代碼就生成出來,同時可以對正式api進行壓測,可惜目前還沒精力寫

7.4. 問題四:做hybrid app在移動端會遇到性能問題吧。。有沒有什么優化經驗可以分享?

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

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

  • Chrome profile(css3動畫)

  • 使用weinre真機測試

我的h5實踐

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

我們團隊還是傾向于分工專業化,各個服務粒度非常小,便于輪崗、還有就是可以為以后像google那樣代碼開放做準備

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

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

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

7.7. 問題七:Node.js做業務金額計算的金額性能和精度夠嗎

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

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

語義上更加清晰

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

這種設計不見得多好,不過結構清晰,對于開發者來說,是比較容易接受的


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

聯系客服

主站蜘蛛池模板: 纳雍县| 龙里县| 陇川县| 成安县| 大埔区| 丰原市| 周口市| 河北省| 来凤县| 佛学| 韶山市| 宁国市| 镇江市| 南木林县| 陆丰市| 嫩江县| 竹溪县| 甘谷县| 尉犁县| 绥滨县| 东台市| 新乡县| 焦作市| 庆云县| 华池县| 抚宁县| 余干县| 临桂县| 堆龙德庆县| 启东市| 烟台市| 来安县| 垦利县| 新昌县| 高邮市| 阿拉善右旗| 广宗县| 平顺县| 榆中县| 望奎县| 桂阳县|