精华 一名全栈工程师Node.js之路
发布于 9 年前 作者 i5ting 25443 次浏览 最后一次编辑是 8 年前 来自 分享

Screen Shot 2016-03-24 at 9.05.42 AM.png

原文[高可用架构]

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%2FKdNO9R8zI1xsDFSR4ZJECUU

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

本周末北京线下会讲讲,感谢@hain 海良组织

github地址,https://github.com/i5ting/nodejs-fullstack 持续更新,欢迎star

ppt版本, http://git.oschina.net/ubiware/node-party/raw/master/10th/i5ting-node 全栈.pdf

全文完

欢迎关注我的公众号【node全栈】

node全栈.png

联系我,更多交流

xiaoweiquan.jpeg

53 回复

好文,收藏了

文章不错,这才是真正的布道者,不回避问题,直面问题,给出解决方案。

布道者和鼓吹者最大的区别就在于:

一个是真正深入使用了,知道深浅;一个刚学了个皮毛,不知深浅。

一个能够相对包容的对待技术,框架,语言;一个是某种技术,框架,语言的教徒,不允许说半点不好,表面虔诚,但大多浅尝辄止。

我个人更看好c和lua的结合,比起javascript和c++的结合更简单灵活,异步表达也更为优雅直观。桑老师提到的 openresty 已经实现了用纯同步的代码写异步程序,是非常好的探索。全栈我认为不应该是语言层面的概念,而是技能层面的概念,应该是跟语言无关的,真正全栈的人,如桑老师,各种语言都能玩得好。全栈是能够统合前后端技术的综合性人才,绝对不是会javascript,会nodejs那么简单,桑老师的文章已经将知识点和方向写得很清楚了,有志于全栈的同学可以参考学习。

@coordcn 很同意跟语言无关这个看法。语言只是解决问题的一种工具,更重要的是对问题及其解决方案以及背后自然原理的理解。如此,才能举一反三。

文章都是干货

ppt版本见https://cnodejs.org/topic/56f8ce05e2d0ba0b32388717

直接预览下载

1 对于回调," 第一、callback hell问题,目前已经很好的解决了 "这吹得有点太大了 koa的yield/co.wrap/async 只能算探索 ,称不上已经很好地的解决了 2 对于事务 java有threadLocal synchronized + hibernate/ibatis MEAN只能靠码农手写代码 3 对于调试 java有异常堆栈, php有行号 nodejs只有events.js: throw er; // Unhandled ‘error’ event

@yakczh 第一点,你认为其他语言有更好的解决方式么?

@yakczh 第二点:单线程里,你讲threadLocal有啥意义么?你所谓hibernate/ibatis就不需要手写代码么?和数据库交互操作差别到底有多少?

@yakczh 第三点:node就没有异常栈打印么?

var stack = new Error().stack
console.log(stack);

@i5ting 其他语言没有这个问题,所以不需要解决

@i5ting hibernate/ibatis有完整的事务支持,大部分情况只需要配置,

@i5ting 同意!,koa@1的yield/co从开发上来说已经是近乎完美的方案了,koa@2正在观望,期待async/await

@i5ting 运行时打印的异常栈,能跟编译前的代码对应上吗?

@yakczh 扯淡,但凡有异步,都会有这个问题,不信你去看promise/a+规范,有多少语言实现了

@yakczh 事务本身是db自己的事儿,而commit\rollback这些语言级别控制差别不会很大。hibernate虽然非常无比完善了,可是很多公司还是用ibatis,其中很大一部分就是熟练度的问题,你说呢?如果你h玩的足够牛逼,实际开发也是够的。所以技术并不是瓶颈,你说呢?

@varHarrie koa@2正式版已经发了,完美async/await等3种中间件写法,如果等node sdk支持async就会发布stable版,值得期待

@yakczh 你用es或ts写,让跟编译的对上,这。。。。有点难为node吧? 我特别赞同@fengmk2的观点,sdk支持的我们都支持,冒险的行为可以做,但线上谨慎用sdk以外的东西

@i5ting @yakczh

改成基本解决比较好,毕竟openresty,fibjs都已经实现了同步代码编写异步程序,javascript和其他语言将来不出意外也应该是这个方向,形式同步才是异步编程的终点,只有这样才能最大限度的解放程序员。

promise,generator/yield,async/await的组合归根到底还是要用异步思维去写异步程序,比回调进步的是,可以进行局部同步,但对异步理解不深入的人还是有困难的。

electronic的东西性能堪忧。。。atom卡爆了,跟subl没法比啊

@coordcn openresty是lua的coroutine吧,其实我没有太看出它和async/await有啥太大差别,求科普

https://cnodejs.org/topic/5709cb2f94b38dcb3c09a7ac#5709fcbebc564eaf3c6a48e4

nodejs只是更直接的奔向共产主义(完全异步),后来发现大跃进、文革(callbackhell)等,于是走上了特色的社会主义,所以多这些来说,真的算解放了,“目前已经很好的解决了”,不算吹牛吧,你说呢?

@THCloud vscode的体验还可以,哈哈,我的mac下,其他确实比较卡

@i5ting 基本的command+L 这类快捷键都不支持呀 我还是去年在微软实习才知道这么个玩意,尝试了一阵还是放弃了,也不写ts也不会那个东西的调试,远不如subl好用。。。

@THCloud 从vsc转sublime再转atom 主要atom丰富拓展,界面友好,其实机器不会太差的,倒没感觉多卡。配合sublime 主要vsc,插件少,选项卡不能忍。

@THCloud 现在已经好非常多了,试试吧

https://github.com/i5ting/vsc

@i5ting

差别大去了,openresty在lua层面是没有显式异步的,跟写同步程序没区别,你即便不理解异步,也可以写异步程序。

如果将openresty理解为隐式coroutine,那async/await可以理解为显式的coroutine,最主要的差别就在这里,async/await还是离不开异步思维的。

nodejs刚开始的时候那种完全回调异步应该叫原始共产主义,基于回调的异步虽然在性能上非常好,但编码复杂,这种模式其他语言早就有了。ndoejs创始人最开始是极力排斥协程的,但现在javascript发展却遮遮掩掩的加入了类协程的东西。真正的共产主义是类似openresty这种的形式同步写法,不管是形式,还是思考方式,程序员都不需要考虑异步。异步的形式对编程是有害的,我们要的只是异步的性能好处。

没说你吹牛,我也不敢说特色社会主义不算解放,但我们肯定会朝真正的社会主义发展的,并且最终会实现真正的共产主义——机器自我编程。

太恐怖了,编程共产主义到来那天,人类将被奴役。。。。

@varHarrie 哇,当时mac mini,打开一个项目,command+p 大半天才出来 然后就果断卸载atom了

@varHarrie 但是electronic的倒是可以有很多subl没有的插件 去年那个什么active power mode,写代码带火花那个,放到subl肯定就没有了,哈哈

好文章! 收藏

@13241491189 你们是真能挖啊,哈哈~

@coordcn 后端就openresty写接口,前端交给node.js,你看这样行不

好文,看了开头,下班后慢慢看

@coordcn 有没有人这样干呢?唯一担心 openresty这个东西的库不够,而开发者又没有能力去造。

@coolicer 如果只会js的建议还是不要用了,的确很多库要自己造的。在局部性能上,如字符串操作,lua的性能还不如js,lua比js优秀的是异步编程模型,lua可以完全做到在lua层用同步代码去写异步程序。js要实现这个特性,generator/yield,async/await都不行,在js层面,异步还是显式的,只能做到局部同步,而且这两者跟回调一样,具有传染性。如果js复杂的编程模型不是难题的话,用js就可以了。lua适合即想获得异步的高性能好处,又不想费脑细胞去理解复杂的异步编程模型的人。

@coordcn 鱼与熊掌啊。js的显式异步是让用户自己管理的意思吗?

@coolicer @coordcn 目前估计只有京东,360这样做,其实是把openresty当做Gateway用的,而不是后端或前端。确实是鱼和熊掌不可兼得啊

@i5ting WAF上用的比较多,章亦春还计划搞一个开源的。

看过 @i5ting 很多文章,内容非常丰富,是踏踏实实做事的一类人,超赞!

好实在的文章

更新了移动端内容

移动端分

  • native原生开发
    • hybrid混搭式开发(比如cordova)
    • 组件式开发(比如rn)

面临的问题:native开发是姥姥不疼舅舅不爱,非常尴尬,很明显连培训出的人就业不要工资混经验就很明显了。另外领导们也都在惦记,能不能用h5写?这还算是保守的,如果直接激进的就直接上rn了,那么native开发的程序员就变了

一个写插件的程序员…招谁惹谁了。。。。

没办法,认命吧,温水里舒服了几年,也该学点东西了

  • hybrid或组件化开发,你总要会一样
  • 无论哪种,你都离前端很近,因为h5或组件化都是从前端走出来的
  • 组件化在前端领域先行,无论借鉴还是学习都不可避免
  • 如果没时间就直接上组件化,如果有时间就好好学学前端完整体系,最终也还是要学组件化

未来的3点判断

  • js一统天下(nodejs做后端,传统web和h5使用javasctipt,更智能的工具如gulp,更简单的写法如coffeescript等)
  • h5大行其道,为最终方向(网速变快,硬件内存增长)
  • 组件化,和jvm所谓跨平台类似,是一个很长的中间过渡阶段,用户体验好,唯一的就是现在相对初期,有点坑

mark

来自酷炫的 CNodeMD

@i5ting 严重赞成,虽然js毛病不少,但也掩盖不了它身上的光芒,前些年由于es标准问题,导致js的发展几乎停滞不前,但现在不一样了,随着es标准的快速迭代,和node, h5的发展,未来将是js的天下。现在很多桌面软件已经用electron开发。后端用node开发真的很爽,没觉得比其他语言哪里差了。关键是前后端语言统一,由此带来的高效与便捷是其他语言没法比的。不说其他,就说处理json数据,这应该是目前使用最广泛的数据交换格式了吧 ,js是最方便的语言,没有之一。

回到顶部