满世界的钉子
nodejs 是一把很不错的锤子,于是在许多 nodejs 工程师看来,满世界都是钉子。
首先要说的是,nodejs 以及 nodejs 社区最具价值的是什么
我曾经问过 substack
为什么你那么热爱 JavaScript 以及 nodejs?
James 回答
因为 npm。大家可以非常方便的发布和分享。
我豁然明白了。James 代表了对于技术和社区狂热的追求的发烧友。他们所追求的,并不是某一个语言,或者某一个技术,而是这个社区里的氛围,是人。
换句话说,如果 .net 有一个和 npm 可媲美的社区,那么,James 一定也会参与其中。
顺便插一句,我提到了 maven 是一个非常好的 repository 管理的方式,公用的 maven 也很不错。他表示很有兴趣,我说这是 Java 的,他说没关系啊。当然了,如果他真的去看了一眼,肯定会觉得无趣的。(我就是欺负你不写 Java…… 逃
再讲一个故事
看到 cnpm 私有库,grunt 编译部署。maven 笑笑说:“我早就可以私有部署了,windows 一键安装,依赖全自动管理,打包、发布、插件开发、执行外部脚本样样精通。”
最后拍拍 nodejs 的头:“孩子你的路还很长……”
所以我深深觉得
nodejs 最大的价值,是他建立起来的 npm 和他的社区。而不是这个语言本身。
nodejs 来做 Web Server 不过是你一厢情愿的痴想
nodejs 诞生最初目的和设计并不是为了做 web server
我记得故事是这样的
有一天,一个大牛觉得 erlang 太难学以及太难,于是就想:要不再搞一个专为高并发而生的语言吧。哎?那 JavaScript 看着不错啊,基于事件的呐,哟,V8 性能那么好啊,嗯,决定就是你了。
所以至今为止,我听过关于 nodejs 最好最棒的分享,是几位童鞋,用 nodejs 替换了原先 erlang 的程序。
注:他们在准备替换这破事之前,从来没有接触过 JavaScript。
这才是 nodejs 的正确的烹饪方法!
注:我才不和你辩,不服你咬我呀!
其实就目前而言,nodejs 做 web server 还是很不错的,这得归功于 npm,其实一门语言或者一门技术的发展需要一个良性的社区,当然也有特例,比如 Java……
然后顺便推荐一下,fibjs,如果你真的要用 JavaScript 来做网站后端的话,去看看这个。
nodejs 并不是前后端分离的最佳实践
参加了许许多多场 nodejs 相关的分享,有一些很有意思的东西。
举个栗子:我们为什么要选择 nodejs
nodejs 对于前端工程师来说没有重新学习的成本
上面这句有没有很熟悉?第一次我不觉得,想想挺对的。自从听了 nodejs 替换 erlang 的分享之后,我就刻意留意了一下这句话出现的频率:在去年和今年上半年的时候,这概率是相当的高。
以至于后来一旦分享有类似的内容,我就开始鄙视分享者的智商……
这不是一个原因,甚至连借口都不是
从上面那个被我反复炒冷饭的故事来看,语言的障碍真的不是问题。
不就是一门语言么,又没让你精通,让你能用这门语言写业务逻辑而已,你竟然学一下都不愿意,还找来一个原因,说我们会这个语言,所以用这个语言一定更好。
活该不能涨工资,只能仰望别人 X赵 的收入。
言归正传,为什么我认为不是最佳实践。
不觉得现在市面上最多的分离实践就是来自于阿里童鞋的分享么?曾几何时,分享会里面总是会有这样一个主题:
X宝/X猫/支X宝前后端分离的实践/思考。
另外透露一个消息:前后端分离这事情啊,阿里内部应该有两个团队在搞,一个是从前端角度出发,一个是从后端角度出发…… (大阿里真有钱啊)
后端角度不太清楚是怎么个做法。
而且我还没听过 支X宝 的分享,不过从分享者的名字来看…… 应该也逃离不出 nodejs 的世界。
X猫/X宝 我记得差不多做法就是:
起一个 nodejs 的 web server,接收 http 请求,动态模板什么的都扔这里面,和后端交互,就从 nodejs 发 RESTFul web server 去。当中 dto 约定,靠工具和文档。
于是大家开始研究用 jade 好还是用 ejs 好。
并且开始觉得:前端的春天已经来了,前端已经向后端迈出了一大步。
在我看来
这好蛋疼!
咱们用 Java 举例子吧。(我就会 Java 你咬我呀~
要分离的目的好多好多
- 动态模板不好用
- 动态模板不好管
- 呈现逻辑写在 jsp 中好蛋疼
- jsp 中可以写 java 代码好蛋疼
- 样式管理好蛋疼
- 我测个 js 我还得起个 jvm 好蛋疼
- 后端没做完我都没办法跑代码
- ... (快来列举种种不好……
但是,如果真的把这些用 nodejs + jade 管理起来就会好了么……
怎么感觉有点
- 为了 nodejs 而 nodejs
- 大阿里是这样做的,所以我们这样做绝对是对的
这类感觉……
你看我到现在还没说
- 为什么不是最佳实践
- 什么才是最佳实践
就我个人而言,前后实践了三个项目,三个定位完全不同的项目,基本上有一个想法,一套方案,并且在现在这个项目大刀阔斧干了,分离得非常彻底,还加入了很多很简单但是非常实用的功能。
根据我这种专业参加分享会的人的经验,总结来看,大阿里毕竟是大阿里,做很靠谱的。很多想法都是通过大阿里分享以后迸出来的火花。
只是通过 nodejs 来做分离这个,有点扯。不过谁知道呢,说不定哪天这个就是一个起点,有别的什么东西和 nodejs 搞出点啥。或许 nodejs 还缺个另一半,就像 ruby on rails 这对好基友……
说真话,我无法回答最佳实践是什么,但是你要问我是怎么做的,我的回答是: