看github上面Tj大神他们的对话,感觉express要死了,大家怎么看
发布于 8 年前 作者 IfAaron 11320 次浏览 来自 分享
24 回复

扯淡,死是一件很难的事儿,就好比iojs出来,nodejs死了么?最后还不是成立了node基金会,合并了。。。。

如果这个项目真的好,一定会有接盘侠的

@i5ting 当然希望这样了,花了很多时间看express了

@IfAaron

希望归希望,但还是建议转koa。用express的大多是老项目,维护也仅仅是针对老项目上出现的问题,远没有koa活跃。

即便koa,有一天也会没落,nodejs也一样。偷懒是人类的天性,也是人类进步的动力,程序员尤其如此,如果在性能和易用能够统一的话,程序员肯定选择趋向于统一的那个技术。代码编写越简单越好。

如果express代表callback异步的话,koa代码generator/yield,async/await(类协程,本质上还是callback,语法糖而已),最终替代他们肯定是类似fibjs那中的没有显式异步的异步,异步过程对普通程序员来说是透明的,跟写同步程序一样的。

只要把握了技术发展的脉络,跟不上潮流的技术就让它去死好了,死了才有新生,才有更好的。

千万不要被某个特定的技术绑死,学其思想,学其精华,技术是死的,人是活的,尤其是基础的东西,不会随着某项技术的消失而消失。多接触底层的东西,多读源代码(nodejs,libuv),注意对标准知识的积累,比如http1.1,http2.0,tcp,这些基础的东西都掌握了,什么框架其实都是一样的,死了一个接着用下一个,没有现成的,自己撸一个。

@coordcn 说的很中肯,但是有时候想想要做到那样还是很难的,比如我就是自动化转的java,做了一年了,一直对前端比较有兴趣,就自学node.js,像express框架,还没搞透呢,现在又建议转koa,我也经常看到大牛建议说不要学习技术的表面,要去看的源码,剖析他的思想,可是知易行难,至少要把表面上的框架摸头,能跟生产力结合,能运用到生产当中去,当遇到瓶颈了,可能才会去考虑源码,就像java里面的spring框架一样,天天用,但是基本没看过他的源码,不过现在晚上有时间也会看看koajs.com,混个脸熟先

@IfAaron

有的东西只是看起来难而已,真正做起来也就那回事,有了一定基础积累,基本上都是相通的。

不要被框架束缚住,多了解底层和规范性的东西,那些东西才是真正不变的。老是跟着框架跑,自己累,成长还慢。 手头上要用的技术和需要长期积累的技术本身并不矛盾,可以同时学习,也没必要都记住,了解个核心大概,只要知道用的时候到什么地方查资料就行了。

看源代码主要看思想和项目的整体框架,在这个基础上,对一些关键技术点的代码进行重点研读,就拿koa来说,核心的代码就那么100行都不到,理解了generator,理解了co,再加上thunkify或pormise,再熟悉下API,基本上就能干活了,就那么点东西。这里有一个前提,你对http1.1协议至少是了解的,不然post请求,尤其是文件上传就会有点小麻烦。你有这个基础,碰到这些问题,直接找社区推荐的库拿来用就是,更牛逼点,自己鲁一个也行。这里又有一个前提,你必须知道nodejs是如何接受和解析http协议的,nodejs的http解析只做到了header结束,body部分是数据流,需要自己处理和解析,这个数据流可以是querystring,也可以是json,也可以是mutilpart,也可以是text或xml。从本质上讲,nodejs提供的只是非常基础的http协议模块,很多事情要么用第三方库,要么自己鲁。即便你只想做前端,这些协议的细节也应该要掌握的。

人总是会为自己找理由的,这是大家的共性,但有的时候真的只需要迈出那么一步,后面的路就豁然开朗了。

@coordcn 有道理,因为不是计科出身,记得刚java入门的时候,带我的师傅就说算法,数据结构什么的都是狗屁,没什么用,要会功能,底层的那些东西不要涉及到;

他开始可能是想让我尽快上手,能帮助企业工作了再去研究吧,所以到现在基本底层的东西一点都不懂,以前学java网络编程的时候,就经常听老师说要买本HTTP详解,没事翻了看看,确实有道理;

老是跟着框架跑真心累,就像ng1,说放弃就放弃了,关于底层的,规范性的知识,coordcn你有木有什么建议,该怎么入手啊

天下武功,唯快不破。 我的总结:猿类三步曲。 初期,有什么用什么; 中期,会什么用什么; 永恒,用什么会什么。

我们每天都装着2000万的肢体在跑来跑去,其实其衬托的头部更是价值连城。 至于A框架、B思想,嗯,就当博览群芳吧,价值表现从来都不是按某个框架和思想而转变的,它们只是价值转换的一个手段之一。 你,知道自己要点什么了嘛?

@iranom 好抽象,不过三部曲我倒是看懂了,踏踏实实慢慢来吧,急躁是没什么用的

@IfAaron

我也不是计算机相关专业,而且我的专业比你的专业离计算机更远。

你那师傅真6666啊,编程永远离不开数据结构和算法,这是基础中的基础,其他什么这框架,那框架,这模式,那模式都必须在数据结构和算法的基础上构建。框架和模式是整体骨骼,数据结构和算法就是血肉。

以http1.1规范举例 直接搜索 rfc2616 网上有中文版本的

http1.1规范大体浏览一遍,至少要知道http包的大致形式

request line形式

Method  URL HTTP-Version CRLF

Method GET POST等,其他的见规范

URL 请求的路径 /name?test=bar#hash 我们用url.parser之后,path='/name', query='test=bar', hash = 'hash'

HTTP-Version HTTP/1.1

status line形式

HTTP-Version Status-Code Status-Parser CRLF

HTTP-Version HTTP/1.1

Status-Code 200 状态码规范里也都有说明,尤其是400之后的错误代码,要了解。

Status-Parser OK

headers

Field: Value CRLF

header各种常用域要了解,规范上都有,这里就不展开了。cookie什么的要会解析,有现成的库可用。

CRLF 这个空行过后可能就是body,具体有没有body要看Content-Length和Content-Type域,也要看是不是Upgrade,当然也要看请求的Method支持不支持。常规都是POST来的。

nodejs解析到此结束,接下来如果有body,怎么处理,要么用第三方库,要么自己实现。

body 具体是什么要看headers里Content-Type域,常用的我讲下。

Content-Type = application/x-www-form-urlencoded 我们平时表格填写的内容就是用这个上传到服务器的,内容是query string,要用queryString解析成对象。

Content-Type = multipart/form-data 我们平时上传文件就是用这个,具体协议见规范 rfc1867

看规范的过程中要注意结合好项目的代码来读(http1.1直接读nodejs的就行,从lib目录的http模块先入手,先理清数据大致的流向,再有重点的细读一些部分),这样会理解得更迅速,规范上的一些文字有的时候并不好理解,而且工程上也未必都严格按照规范来,规范是基础,是参考,最终还是要用代码来表达出来。整个了解后,工作中用到重点学习,慢慢的就形成体系,融会贯通了。

@coordcn HTTP协议确实要好好看看, rfc1867 这个网站全英文,看起来难度有点大,刚刚上jd上面买了本HTTP权威指南,工作之余慢慢看,前两天用nodejs写网站遇到一个问题忙了好久,最后才知道是 Content-Type = multipart/form-data 的时候,需要用到一个中间件connect-multipty,如果对协议比较清楚的话也不用花那么多时间了

@IfAaron

rfc文档都有详细的例子,结合例子,再结合代码来看,基本上就能理解了。

dougwilson 真是万年接盘侠。

万物无有常,一切有为法如梦幻泡影,如露亦如电。

本来express就是开源免费,非企业级框架,死肯定不会死,如果你是公司,完全可以用strongloop这种企业级框架,而且目前来看,对于strongloop这种企业级解决方案的更新和完善一直在进行中,而且由于是被IBM收购,这种企业级框架完全是可持续的,花钱的总比不花钱的好点咯,起码有人维护

看好Koa2,但目前正式版还没出来,仍然使用Express,观望Koa。

@coordcn 五十年来,变化最小的就是Unix和SQL,长盛不衰

@leizongmin koa2里面都用了es7的特性了,之前用的express,但是从8月份基本就不更新了,所以现在转到koa了,但是要玩得转的话es6基本要比较熟,反正都是坑啊,国内感觉koa普及比较低啊,基本没有什么课程之类的

@Samurais 确实,可是框架换来换去的,比较头疼啊

@IfAaron 现在看这些框架看的不多了,主要精力要么看java,要么看node的源码和es6,真的只有底层才是不变的,不能老是被框架牵着鼻子走

@Samurais

的确如此。一般来说,设计越精妙的东西,变化越小。越是剧烈变化的,要么是原先的设计就有问题,要么是技术本身还在探索阶段。

我用的东西大多也是很少剧烈变化的,vim,c,lua。

现在的前端,看似繁盛,其实很多技术本质上都在填坑,并没有多少实质的创新。当然,从另外一个角度讲,没这么多坑,哪里有这么多工作,这么多招聘呢?不管大家愿意不愿意承认,因为各种原因(有javascript语言本身的原因,有浏览器厂商标对准执行的原因),大家不得不成为了孔乙己,孔乙己最擅长的就是回字有多少中写法,前端同学是不是也不得不去挖掘各种语言技巧,各种流行的技术,你不学,就代表了落后,有一种无形的力量推着大家不断去追逐最新的东西。

我有的时候在想,如果当时web选择的是lua,而不是匆忙上阵的javascript,现在情况会不会好点。答案是否定的,lua虽然和javacript非常类似,但语法风格相差太大。lua是力求精巧的学院派作品,而javascript是工程产品,它们的进化路线截然不同。类c语言风格让javascript上手足够简单,但lua是固执的学院派,他不会向市场低头,他对每个特性的加入都小心翼翼,甚至有些过于封闭,但恰恰是这种固执,保证了lua实质上的简单。javascript则不一样,javascript的进化道路上不断的吸收其他语言的特性,上手容易,但要精通,太难太难,谁敢拍着胸脯说对javascript语言的边边角角都了然于胸的?并没有多少人敢。lua即便一开始被选中了,最终的结局也会和javascript一样,越来越臃肿,越来越复杂。大家必须要明白,这才是工程的真谛,工程不仅仅要解决技术本身的问题,还要创造就业。c++标准都那么复杂了,不照样很多人用,工程上有需要,就有这些语言存在的理由。

@IfAaron 也不是说express里面就用不了es7的新特性,并不是非koa不可的

回到顶部