全栈工程师之路-Node.js

全栈工程师之路-Node.js

高可用架构专用javascript

原文[高可用架构]php

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&pass_ticket=xdp3crkTJPuOH6ggUMKnwvfDGKEnMUvwC5V%2FdxlW%2FKdNO9R8zI1xsDFSR4ZJECUUcss

仔细的对比了一遍,感谢tim yang和庆丰校长的整理,很是严谨,比我讲的要好,另外感谢霍老板封我是StuQ明星讲师[呲牙][呲牙]html

持续更新版本前端

已参加分享vue

若是想邀请分享,请邮寄给我shiren1118@126.com,若是时间ok,我会尽可能分享html5

主要内容

  1. Why Node.js ?
  • 历史
  • 槽点
  • 架构平衡和选择
  • 企业级
  1. 我眼中的Node.js核心
  2. 快速开发实践
  3. 全栈 or 全烂 ?
  • 工具链
  • 前端开发4阶段
  • Hybrid开发
  • 跨平台
  • 全栈的可能
  1. 将来

最近比较火的2016年开发者调查了,Node.js和全栈、以及和js相关的技术都有不错的战绩,此次给你们分享一下《全栈工程师之路-Node.js》,准备的还不够充分,水平也有限,你们见谅啊java

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

讲师介绍

桑世龙,目前在天津创业,空弦科技 CTO,开源项目Moajs做者,StuQ明星讲师 公司目前使用技术主要是Node.js, 技术栈算所谓的MEAN(mongodb + express + angular + node); 曾在新浪,网秦等工做过; 算全栈程序员吧,带过前端、后端、数据分析、移动端负责人、作过首席架构师、技术总监,目前主要从事技术架构 + 招人工做mysql

Part 1:为何选用Node.js ?

已经7岁的Node.js,你还熟悉么?

之前?如今?

回顾一下2015年Node.js的发展历史

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

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 和解提案

Q2(2季度)

  • npm 支持私有模块
  • Node 项目领导人 TJ Fontaine 逐步解除核心身份并离开 Joyent 公司
    • A changing of the guard in Nodeland.
  • Node.js 和 io.js 在 Node 基金会下合并状况

Q3(3季度)

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

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

版本帝?

去年

  • 从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(稳定版本)

schedule.png

总体来讲趋于稳定

  • 成立了nodejs基金会,可以让nodejs在将来有更好的开源社区支持
  • 发布了LTS版本,意味着api稳定
  • 快速发版本,不少人吐槽这个,其实换个角度看,这也是社区活跃的一个体现,但若是你们真的看CHANGELOG,其实都是小改进,并且是边边角角的改进,也就是说nodejs的core(核心)已经很是稳定了,能够大规模使用

之前咱们老是喜欢拿异步说事儿

Node.js与生俱来的2个特性

  • event-driven
  • non-blocking I/O

结果,今天。。。各类【异步】。。。烂大街了

异步已经不是明显优点了

除了性能,其余都是病?

  • 第1、callback hell问题,目前已经很好的解决了,promise/generator/async后面会讲
  • 第2、npm已是开源世界里最大的包管理器了,模块很是丰富(25.6万+)

官方说

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

之前咱们老是喜欢拿异步说事儿,如今咱们拿Node.js的强大的生态来炫耀

大事儿记

下面介绍点Node.js的大事儿记

企业级

Node.js基金会的创始成员包括Joyent、IBM、Paypal、微软、Fidelity和Linux基金会

更多参见 https://nodejs.org/en/foundation/members/

对于企业级开发,Node.js是足够的,不管从性能、安全、稳定性等都是很是棒的。

空弦科技作的是基于云仓储的SaaS服务,给中小卖家提供服务,核心系统是进销存+订单池+WMS。目前来看不存在任何问题,稍后会讲咱们为啥选择Node.js

es && babel

  • 2015年 Ecma国际大会宣布正式批准ECMA-262第6版,亦即ECMAScript 2015(曾用名:ECMAScript 六、ES6)的语言规范

http://babeljs.io/

babel做为es编译器,已经大量开始使用了,模块作的很是棒,还有人用babel写其余语言编译器

Node.js里在0.12以后才增长es6特性,es7的目前还不支持。

因此在Node.js里使用es里比较高级的特性,是须要babel去编译处理的。

这是node追逐的事实标准

微软请求 Node.js 支持 ChakraCore

将来Node.js不仅是基于chrome v8引擎,它还能够支持更多其余js引擎,对生态、效率提高等很是有好处

蔡伟小兄弟的查克拉benchmark的对比

基本结论是 V8 ES5 >> 查克拉 ES6 > 查克拉 ES5 > V8 ES6

为何咱们选择Node.js ?

先看一下咱们的瓶颈在哪里 ?

  • 1)人(天津很差招人)

Node.js招不到,好多都是从java转的,前端也很差找,好多也是从java转的,咱们至关于从0开始组建团队

  • 2)开发速度

创业公司,5分钟要造火箭。。。你们都懂

因此让开发快速进入状态,提升开发速度,对咱们来讲相当重要

  • 3)稳定

在没有专业运维人员的状况下,如何保证系统可用、稳定

因而就引出了我认为的Node.js的好处

  • 1)即一样不优化,性能比大部分语言好(天生被黑的优越感,没办法)
  • 2)即便优化,也比其余语言简单,好比java
  • 3)有足够多的选择和架构的平衡
  • 4)如实在不够,java补

黑一下go语言吧

go不着

  • 没有好的包管理
  • 没有好的调试工具
  • 语法较难

适合高端人群,但对团队开发是有门槛的,不适用大部分团队

选择

Node.js给了咱们足够的选择空间

1)可难可易

  • 能够采用面向过程
  • 能够面向对象
  • 能够函数式

甚至能够用各类编译器coffee、typescript、babel(es)等

对于从0开始的团队来说,能够先面向过程、而后随着团队的成熟度,一点一点增长难度

2)提供好的基础和包管理工具

  • 测试相关 tdd/bdd/测试覆盖率
  • 规范化 standard、各类lint、hint
  • 构建相关 gulp、grunt、webpack,大量插件
  • 生成器 yo等
  • 包管理工具npm足够简单易用

以上这些都作大型软件的基础,Node.js在这方面作得很是好

3)特定场景的快速

不少人把mean组合(好比mean.io)起来,这样作的好处是若是熟悉,开发速度确实会很是快,但肯定是难度太大,不多有人能搞的定

metetor模糊了服务端和客户端,是同构的典型应用,对于实时场景是很是高效的。

这种东西都算特定场景的快速,通常不敢轻易上,调优难度很是大,若是有人能cover的住,在初期是很是高效的。

4)总结

  • 能够简单,能够难
  • 能够快、也能够慢
  • 能够开发大型软件

还有一个问题就是若是以上不知足咋办?这时就须要架构平衡了

架构平衡

先说技术选型的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的支持。避免过多的时间用在早轮子上,影响开发进度

效率问题?

执行效率:

  • 一样不优化,性能比大部分语言好

开发效率:

  • Node.js自己比较简单,开发效率仍是比较高的
  • 完善的生态,好比测试、工具、npm大量模块

缺乏rails同样的大杀器

  • scaffold脚手架
  • orm太弱

Node.js的web开发框架express、koa等,简单,小巧,精致,缺点是集成度不够,目前已有的mean或yo或sails等总有某种方面的不满意

因此咱们须要作的

  • 固化项目结构
  • 限定orm
  • 自定义脚手架

恰恰Node.js提供了2点,可让你30分钟写一个脚手架

  • cli命令模块,编写很是容易
  • 基于js的模板引擎(知名的30+)

咱们用Node.js作什么?

  • api服务
  • 前端(moa-frontend)
  • SDK(OAuth Provider)
  • 辅助开发cli工具

目前进度

  • 使用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化
    • 模块化
    • 最小化
    • 服务化

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

  • 1)小而美的哲学
  • 2)从LAMP到MEAN
  • 3)异步流程控制
  • 4)Node.js Web开发
  • 5)Node.js 模块开发

时间缘由,接下来稍微介绍一下MEAN

小而美的哲学

"Small is beautiful"是Unix哲学9条里的第一条,但对Node.js来讲,它实在是再合适不过了

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

<!-- ![](images/nodejs-philosophy.png) -->

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

从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 讲的就是咱们用的技术栈

异步流程控制

js流程控制的演进过程,分如下5部分

    1. 回调函数Callbacks
    1. 异步JavaScript
    1. Promise/a+规范
    1. 生成器Generators/ yield(es6)
    1. Async/ await(es7)

  • 目前全部版本都支持Promise/a+规范
  • 目前Node.js 4.0 + 支持Generators/ yield
  • 目前不支持ES7里的Async/await,但能够经过babel实现

总体来讲,对异步流程控制解决的仍是比较好的。

详见Node.js最新技术栈之Promise篇

Node.js Web开发

  • Node.js Web开发
    • express、koa
    • restify、hapi
    • 其余框架sails、meteor

各类类型web开发都支持的,通常咱们采用非restful的使用express、koa更简单

若是是纯restful,能够采用restify、hapi

另外还有快速模拟api的json-server,对rest支持超方便

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

Part 3:快速开发实践

一、业务边界优化

创业公司有不少可变性,要作的系统也无数,如何保证业务系统的边界是很是难的,咱们其实走了不少弯路,图-稍后补

二、静态api理论

当需求和ue定下来以后,就开始编写静态api,这样app、h五、前端就可使用静态api完成功能,然后端也能够以静态api为标准来实现,总体效率仍是比较高的。

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

三、api约定

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 开发总结

四、约定结构

和java开发里的目录结构相似,该分层的分层,适当的按照express/koa增长中间件、路由等目录,便于开发

五、使用npm模块化

  • 使用npmjs的private私有模块(目前作法)
  • 使用npm的本地模块开发方法(测试和部署都很是快)
  • 搭建npm私服(todo)
hz-api-cloud-admin
hz-api-cloud-order
hz-api-cloud-stock
hz-api-private
hz-api-private-admin
hz-dao-cloud
hz-dao-private
hz-dao-usercenter
hz-doc-api
hz-frontend
hz-mq 
hz-sms
hz-usercenter
xbm-sdk
hz-api-admin
hz-api-crm
hz-api-order
hz-api-statistics
hz-api-stock
hz-config
hz-dao
hz-doc

六、编写生成器

在web开发里,写了moajs生成器,相似于rails

moag order name:string password:string

其余开发,如iOS开发里模型校验很是烦,因而写了一个json2objc命令行工具,读取json,生成oc代码,能够节省很多时间

七、Moajs框架和先后端分离

  • 前端:moa-frontend
    • public下面的采用nginx作反向代理
    • 其余的采用express+jade精简代码(ajax与后端交互)
  • 后端:moa-api

1)moa生成器

即上面讲的生成器scaffold

2)moa-frontend

技术栈

  • express
  • jade
  • bootstrap、bootstrap-table
  • jquery
  • gulp
  • nginx

3)moa-api

技术栈

Features

  • 自动加载路由
  • 支持mongodb配置
  • 集成mongoosedao,快速写crud等dao接口
  • 自带用户管理
  • 使用jsonwebtoken作用户鉴权
  • 支持migrate测试
  • 支持mocha测试
  • 默认集成res.api,便于写接口
  • 集成supervisor,代码变更,自动重载
  • gulp自动监控文件变更,跑测试
  • gulp routes生成路由说明
  • 使用log4js记录日志

4)总结

从开发效果上看,仍是很是快的,很是稳定的

更多参见我写的《Moajs框架演进之路》

其余

  • 《从0开始写Node.js框架》

Part 4:全栈 or 全烂 ?

Node.js相关工具

  • grunt/gulp/fis/webpack
  • bower/spm/npm
  • tdd/bdd cucumber/mocha
  • standard
  • babel/typescript/coffee

前端开发4阶段

  • html/css/js(基础)
  • jQuery、jQuery-ui,Extjs(曾经流行)
  • Backbone(mvc),Angularjs、Vuejs(当前流行)
  • React组件化(将来趋势)、Vuejs

Vuejs综合Angular和React的优势,应该是下一个流行趋势

Hybrid开发

Hybrid混搭开发是指使用html5技术开发的跨浏览器应用,并最终能够将html5.js.css等打包成apk和ipa包的开发方式。它也能够上传到应用商店,提供给移动设备进行安装。它最大的好处是经过h5开发一次,就能够在多个平台上安装。

将来的2点

  • js一统天下(nodejs作后端,传统web和h5使用javasctipt,更智能的工具如gulp,更简单的写法如coffeescript等)
  • h5大行其道(网速变快,硬件内存增加)

跨平台

1)c/s架构到b/s架构

这个大部分都清楚,很少说

2)移动端:加壳

在浏览器上作文章,把页面生成各个移动端的app文件

3)PC端:继续加壳

同样是延续浏览器作文章,不过此次把页面生成各个PC平台的可执行文件

  • node-webkit is renamed NW.js
  • Electron - Build cross platform desktop apps with web technologies

目前比较火的编辑器atomvscode都是基于Electron打包的。

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)当下流行玩法

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加壳打包

亲,你看到将来了么?

6)总结

讲了node工具,前端4阶段,hybrid,各类跨平台,目前就是为了介绍Node全栈的各类可能,下面讲一下如何能作到Node全栈?

如何全栈?

全栈核心

  • 后端不会的ui(界面相关)
  • 前端不会的db(业务相关)

只要打通这2个要点,其余就比较容易了

1)从后端转

作后端的人

  • 对数据库是比较熟悉,不管mongodb,仍是mysql、postgres
  • 对前端理解比较弱,会基本的html,css,模板引擎等比较熟悉
4阶段按部就班,build与工具齐飞

前端开发4阶段,个人感受是按照顺序,按部就班

  • html/css/js(基础)
  • jQuery、jQuery-ui,Extjs(曾经流行)
  • Backbone,Angularjs(当前流行)、Vuejs
  • React(将来趋势)、Vuejs

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周就已经很是熟练了,个人计划是半年后,让他们接触【异步流程处理】和【数据库】相关内容,学习后端代码,就能够全栈了

<!-- ![](images/moa-frontend.png) -->

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的坑,其实就很是好办了。

  • 而后h五、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)、一路走到如今的总结吧

Part 5:将来

多是一场春梦,也可能一个变革机遇,咱们更相信它是变革机遇,拭目以待吧

谢谢你们

Q & A

问题一:在全栈的语言选择上,除了node.js,是否还考虑过其余语言?

有的,将来swift和lua是有可能的。swift的语法和性能上有很大优点,lua在openresty的推进下也有机会,不过没有swift大

像WebAssembly之类的就不太看好了

问题二:请教桑老师:刚才你说的并发开发流程中静态api指的是api文档?

若是是的话谁负责编写?大家目前已是一我的分模块从前端写到后端了吗?

目前没作到文档即静态api,因此目前是直接提供json和部分json-server

负责是后端开发的leader在写,他的进度会比正常开发要早一周左右

目前不是一我的写全部的先后端,团队成立不久,天津Node.js会的很少,因此仍是先后端分离。可是经过moa-frontend可让前端了解express等后端知识,适当的时候会给予机会,前端转后端

问题三:第一贵司在开发协做中提到了静态api,请问是否是有什么比较好的工具能够推荐?

nodejs里json-server 比较好

我其实很想围绕静态api,写各类请求的生成器,只要api出来,文档和各平台的http请求代码就生成出来,同时能够对正式api进行压测,惋惜目前还没精力写

问题四:作hybrid app在移动端会遇到性能问题吧。。有没有什么优化经验能够分享?

  • 足够轻量级,少选大框架,作好前端该有的优化
  • 注意touch和click的区别,好比fastclick或zeptojs的tap手势
  • Chrome profile(css3动画)
  • 使用weinre真机测试

个人h5实践

问题五:若是都全栈了,当前大家团队是如何分工的?

咱们团队仍是倾向于分工专业化,各个服务粒度很是小,便于轮岗、还有就是能够为之后像google那样代码开放作准备

可是有不少状况下,是须要有机动的突击队的(尤为是创业时期),这样能够随便组合,另外就是全栈为remote提供了更多便利性。

问题六:h5在手机上用iscroll坑比较多啊 尤为三星打开硬件加速的时候render页面,桑老师怎么看?

能够尝试一下淘宝系的h5虚拟化,鬼道曾经在as大会上讲过的,咱们目前还没能力作这么深层次的优化

问题七:Node.js作业务金额计算的金额性能和精度够吗

1)你问的不是Node.js,而是Node.js要操做的数据库。 2)耗性能的计算能够在架构上平衡的

  • 若是能够延时,mq就能够了
  • 若是是非延时状况,能够采用其余语言编写对应服务,不必非要必定要Node.js 3)咱们目前的场景,尚未在计算遇到瓶颈

问题八:关于API返回格式那里,对于status为何不打平了把code和message放出来?这么设定有什么好处么?

语义上更加清晰

整个返回的json就只有data和status,若是status.code!=0,我取msg就行了,若是等于0,处理data数据

这种设计不见得多好,不过结构清晰,对于开发者来讲,是比较容易接受的

相关文章
相关标签/搜索