1
Mark24 2015-12-12 10:17:54 +08:00 via Android
JS 语法挫,坑多。这种语言不改版,继续走……感觉就在做试验,不同浏览器对最新 ES6 支持不同,火狐主导了 ES 的标准,谷歌提供了 V8 引擎, V8 引擎对 JS 支持并不是最新,最全,最百分百,node 依赖 V8 。问题来了,随着 JS 升级新特性加入,浏览器支持标准有良莠不齐,实现效果都不太一样。各种第三方库,怎么活?以后怎么过?
|
2
Mark24 2015-12-12 10:22:49 +08:00 via Android
怎么发出去了…还没打完……后端问题一致的, node 将会面临 JS 碎片化带来的问题。
JS 开发效率真的高么? 其他语言也有大并发框架。 Python 光光是从 2 迁移到 3 就够烦了。 JS 怎么迁。 对了 PHP7 性能大幅提升。 你觉得放着好用的不用……用一个基本问题都解决好的,所谓的新技术……老板估计根本听不进去。 只有技术人员会热衷吧。 这是我的一点看法。 |
3
monsterxx03 2015-12-12 10:28:26 +08:00
就 js 那点语法抽象能力,先告诉我到底有什么优点
|
4
Mark24 2015-12-12 10:33:48 +08:00 via Android
@Mark24 是基本问题都没解决,不是都解决。
个人觉得,好的开发语言,要 语法要优美,开发效率要高,要稳定,就算升级,迁移要无痛。各平台效果要一致,不要给开发人员增加额外负担。第三方库要多,不仅要多,对于库本身开发难度也不要那么大。这些都是作为万金油要解决的。 JS 想做万金油,请问 JS 解决了多少…… Node 解决了多少? 后期维护,建立多种框架,怎么玩。 一个 JS 切换好几种写法?? 呵呵 至少得准备好了,再来踢馆。 Node 就用异步的一个卖点,社区就得瑟的不得了。拜托其他语言也有。干活,四五个月,不能突然觉得做不下去了,切换技术栈。别逗。要成熟一点。 谷歌和火狐联手, JS 还好说。 如果是重写 Python 解释器, Node 异步特性也能得到,意义在哪里? 其他都不考虑么 补充看法,有点偏激 |
5
p412726700 2015-12-12 10:45:19 +08:00
js 被喷的越激烈 是不是就说明 js 被关注的就越多
|
6
guoziyan 2015-12-12 11:24:30 +08:00
没人用的和被人喷的,看样子 js 属于后者。
|
7
hcymk2 2015-12-12 11:30:48 +08:00
黑都是青逼出来的。
|
8
bydmm 2015-12-12 11:33:33 +08:00 1
NODE 现在的新趋势是只写 VC 层,业务都走 API, 有时候做一点多 API,IO 整合的工作。
整个架构总的来说还是异构的,有 NODE 有 PHP/JSVA/PYTHON 。 所以你们也别急着喷 NODE 。 |
9
jiongxiaobu 2015-12-12 11:36:33 +08:00 via Android
喷的人应该并不真的会 JS 吧
|
11
zhouyg 2015-12-12 11:39:42 +08:00
世界上只有两种语言,没人用的和被人喷的。
|
12
gamexg 2015-12-12 11:42:34 +08:00
@Mark24 python 不用重写解释器,很早就有完整的异步支持了。异步回调就不说了, gevent 库可以在不修改代码的情况下直接将多线程同步程序变成协程异步程序,而且对调用的现存第三方库同样有效。直接按照一般的多线程同步方式写代码, gevent 内部帮你改成协程异步的实现。
对 node 不熟悉,只用过 socket.io ,前后端都在一个项目里面的确方便。但是匿名、回调好多。 现在用 python ,觉得动态类型语言用起来方便,开发速度快。但是没有固定的类型定义,没有编译时检查,一但代码量上去了很容易一片混乱。 java 本身有太笨重的感觉,例如 一个 post 请求不算对结果处理就达到了 20 行...不过还好有第三方库。 go 用起来的确好用。 信道 、协程用起来太方便了,而官方推荐使用 信道 同步,结果有几个函数已经进入回调、信道地狱模式了,那几个关联函数平均每个都有 7 个以上的匿名函数+协程... |
15
jukka 2015-12-12 12:14:42 +08:00
Node 会以他自己的方式融入整个项目的技术栈,现代项目很少有 XXX is everything 了。
|
16
aszxqw 2015-12-12 12:52:16 +08:00
如果没有异步这个喷点,我觉得 node.js 真的没什么好黑的。
出色的包管理和社区,而且对前端开发人员太友好了。 我还是那个观点,如果 node.js 当初是设计成 fibjs 这种协程的结构,真的是非常赞。 |
17
bydmm 2015-12-12 12:54:43 +08:00
@123s 不能简单的叫分担工作,在实际的工作中你会发现 Controller 的代码和 View 的代码是强相关的,如果你们公司是传统的后端工程师写 controller 的分工,你会发现这一块经常会出现 view 需要 controller 修改代码的情况。
如果你用过 angularjs 的此类工具,你会发现实际上此类框架的 controller / routing 就是写在 js 里的。 但是 angularjs 等前端 MVVM 工具无论是兼容性,还是各自框架的癖好,都会让你感觉不顺手,比如你就是不喜欢 angularjs 的 binding ,而是就是喜欢用顺手的 jQuery ,然后又像自己能控制 routing 和 controller 怎么办? 这导致很多人一直在尝试和寻找不同的前端 MVVM 框架,再浪费时间之后发现还是不顺手,或者兼容性问题。 最后 NODE 出来了,你会发现前端能用自己熟悉的 JS 语言,然后自己写 controller 和 routing ,并且同时又能和往常一下没有被特别的前端架构所限制(前端想怎么写怎么写, jQuery 又如何?)。 至于 NODE 的异步风格,反正不写业务就还好啦,前端工程师也适应了回调的编程模式。 而且 NODE 在某些情况下还有神奇的优势,比如你有个需求要客户端同步发邮件,同步下载(我指的是对前端的 AJAX 链接不断,等到彻底搞好了才结束,而不是轮询求状态) |
20
cheng007 2015-12-12 13:07:28 +08:00
后端逻辑要是稍微复杂,千万别用 NODE.js 。
你试想一下,你的业务逻辑被 IO 引发的 callback 分割的支离破碎,这样的代码怎么设计,怎么维护? 楼上说的 python gevent 比异步回调强的不是一星半点 |
21
jarlyyn 2015-12-12 13:11:22 +08:00
python 和 perl 都能对喷
一个说对方不规范 一个说对方太死板 so.... |
22
echo1937 2015-12-12 14:05:56 +08:00
@yangtze 额,从本体而言 Python 和 NODE 对 CPU 密集型任务都不友好,但 Python 弱很多的结论是怎么得出来的, NODE 在这方面比 Cython 和 Pypy 都高出几条街吗?
|
23
jin5354 2015-12-12 14:07:01 +08:00
反正 JS 在浏览器端一家独大,不但向前 15 年,估计向后至少 8 年 10 年依然能保持垄断,并且在 TC39 与各种社团的推动下,语言本身一直在进步。
其他端都是被带起来的,啥 nodejs ,啥 reactive-natice ,都是浏览器端工程师下班了闲着没事捣鼓出来的。就算死了,还会有新的玩具站起来。 |
24
jiongxiaobu 2015-12-12 14:08:43 +08:00 via Android
楼主一定是来骗铜币的
|
25
fy 2015-12-12 14:18:55 +08:00
怒骗铜币
|
27
whimsySun 2015-12-12 14:25:06 +08:00
@Mark24 在 node 这边, es 特性都是基本上通过 babel 解决;前端的话,你可以参考国外的发展,基本上也都是用 babel 。
|
28
yangtze 2015-12-12 14:42:52 +08:00
@echo1937 原生 Node 比 pypy 计算效率高 10 倍左右, Cython 不清楚,但是 Node 支持 C++ 模块,效率比原生高。
以上来自 ' 深入浅出 NodeJS ' |
29
plqws 2015-12-12 14:49:40 +08:00
微软有 TypeScript , ES7 有 async await ,我认为完全可以拿来做大项目了
|
30
123s OP @jiongxiaobu 哈哈,不要说粗来嘛。
|
32
chairuosen 2015-12-12 15:08:09 +08:00
if else 分支多一点 再放在异步的回调里,会疯
|
33
k9982874 2015-12-12 15:16:25 +08:00
as3 让做动画的当上游戏攻城狮,狠捞了一笔。
node.js 能不能让做网页的当上架构师捞上一笔呢? |
34
123s OP @chairuosen if else 哪个语言都有,不给把锅丢给 node 吧。好吧,后面你们都只喷异步了...
|
35
chairuosen 2015-12-12 15:29:32 +08:00
@123s 我是指比如这种写法,用 node 写比较痛苦。
if ( cachedData ){ return cachedData; }else{ data = getData(); return data; } getData()是个异步 io 的话,就得全部改成回调,如果这个 if else 分支本来全是同步返回的,结果只有一个小分支是异步取数据,也得全改成回调。 好在有 Promise 解决这个问题 |
36
dqh3000 2015-12-12 16:52:12 +08:00
再过两年支持 es7 await 了,就显得不异步了吧?
|
37
kjkjkljkj 2015-12-12 16:58:34 +08:00
@chairuosen
楼主标题里面已经说了不考虑显式异步, 你们还拿这个说事就不好了. 另外我教你一个新姿势: https://gist.github.com/Enkows/9d9c02a31c838481df55 现在还在拿 异步 /callback 来喷 nodejs 的多半都是没有深入了解 js 的, 不过也怪有些 node 粉只懂得说异步高性能 |
38
chairuosen 2015-12-12 17:21:20 +08:00
@kjkjkljkj 恩,这是 ES7 了,还有 ES6 的方法我也知道。。。回帖时不清楚显示异步是这个而已。。
|
39
CMGS 2015-12-12 17:22:34 +08:00
我就看看戏。。。
觉得 node 牛逼的,出门左拐去看 node 源码再来说 觉得 python 傻逼的, pypy 焦作人 另外我是 rust 党, php 才是世界上最好的语言噢耶! |
40
otakustay 2015-12-12 17:27:25 +08:00 4
来表演一下正确的黑法:
1. 显式异步没有错,错在 Node 从这么多异步方案中选择了最糟糕的单 callback 模型,而 Node 之初社区已经在讨论 Promise 了 2. 拜第 1 点所赐, Node 的异常流非常坑爹,必须手动判断异常存在并且手动编码完成 rethrow ,一个语言在异常上没有自动 rethrow 的机制会让很多异常被淹没或者产生更多不确定性的负面影响 3. 官方模块抽象程度不够,如 http 和 https 竟然分了 2 个独立模块 4. 官方 API 命名不一致, fs.readFile 是对的,那谁告诉我 fs.readdir 为啥全小写了 5. 没有正确区分标准库和运行时,明年 Charkra Node 肯定要在这事上遇到不小有阻碍 6. 对 ES 新语法的支持太慢( V8 :这个锅我来背) 7. 纯计算上对多核支持太差( V8 :这个锅还是我背) 8. 一个 node_modules 文件夹死活不能配置,还叫着 npm 以后要连前端的包也能一起管理,所以未来前端也叫 node 了,生命的大和谐 |
41
bydmm 2015-12-12 18:37:33 +08:00
用 CPP 写 node 模块,并且把这个作为性能解决的最终方案的,肯定是高级黑
|
42
magicdawn 2015-12-12 21:37:35 +08:00
哦~找不着合适的语言玩~
非缩进党对 python 无爱, ruby 太复杂, 没有 Google, 根本不知道一个变量从哪来, golang 做工程够好, 但是语言那挫样, 没有包管理硬伤. php 感觉需要先弄个 server, 然后请求下才运行, 现在貌似不是这样了. 然后呢我说 npm 比 gem/pip/ go get 啥的好用多了你信不信~ |
47
Wangxf 2015-12-13 01:40:02 +08:00
对 V8 依赖性太大,这么说吧,永远不可能成为主流后端语言,但是会成为前端工程师的必备技能,后端的辅助
|
48
Wangxf 2015-12-13 01:55:32 +08:00
另外我觉得 bower 真是个好东西,尼玛 npm 那是后端的,我只想要管理我的文件模块,结果 npm 一坨出来是什么玩意儿?妈蛋,不说你不想接触 node , node 这东西社区太特么强大了,分分钟蚕食别人没法活
|
49
banri 2015-12-13 06:15:20 +08:00 via Android
再怎么黑,前端早已离不开 Node 。
即便只会切图,也很难离开前端那一套基于 Node 的构建工具。 这些都已经证明了它的价值吧… |
50
banri 2015-12-13 06:23:12 +08:00 via Android
|
51
FrankFang128 2015-12-13 09:13:08 +08:00 via Android
JS 最大的优点:迭代快。
|
52
jiongxiaobu 2015-12-13 10:10:12 +08:00 via Android
@banri npm3+ 没有这个问题了
|
54
edsgerlin 2015-12-13 13:02:49 +08:00
EcmaScript 最大的黑点应该是 weak type ,其次是没 Reference Implementation 。到现在能完全实现 ES5 spec 没有任何 Quirk 的浏览器都没有,也就写 node 还算是轻松点。
所以说, TypeScript 大法好,就是调用没有官方支持的库比较不爽,毕竟接口设计根本没考虑类型…… |
55
yy77 2015-12-13 14:13:54 +08:00
不异步就不会有那么好的多进程 performance 了。至于语言标准的问题,现在主流的是写一些前端来编译到特定平台的所支持的 js 。
|
59
chemzqm 2015-12-13 16:14:53 +08:00
https://github.com/jonathanong/async-control-flow
JS 语言确实坑多,这不可能改变,但有一件事可以改变就是你如何去写 JS |
60
raptor 2015-12-13 16:54:50 +08:00
居然说 JS 有出色的包管理…说它有最多种包管理还差不多…
|
61
CMGS 2015-12-13 17:45:06 +08:00
@bramblex 无他,因为我看过,并不觉得 node 好牛逼,就这么简单。另外我不能实现 pypy 不代表我不用 pypy ,论性能, node 还是靠边吧
|
62
bramblex 2015-12-13 18:00:04 +08:00
|
63
FrankFang128 2015-12-13 18:04:28 +08:00 via Android
@Wangxf bower 已停止维护,官方建议用 npm 。。。
|
64
CMGS 2015-12-13 18:49:33 +08:00
@bramblex 恩恩脱离运行时谈语言性能您觉得挺合适对不对?然后啊,我觉得呢,有时间看看为何某些情况下 JS 在 V8 上性能比较好会对自己的技术成长有帮助。
|
65
CMGS 2015-12-13 18:55:46 +08:00
@bramblex 另外啊,我觉得你最开始问的「凭什么要求觉得 node 牛逼的人去看源码」这种问题呢,只能说还是有人喜欢一叶障目的。当然了,我认为现在 node 界(不仅仅是前端),就是太多这样一叶障目的人了。另外不用 at 我了,我不喜欢论语言这种 lowb 的行为,为一个工具而争论。 node 或者 js 哪天能真正走向工程严谨的时候自然大家心服口服的用,目前来恩,开心就好。
|
67
jin5354 2015-12-13 19:54:53 +08:00
@banri gulp 出现之前, grunt 作为唯一的流程工具也是很受欢迎的,结果现在也没落了
没准哪天服务器端出现个更好用的 edon.js , node.js 就也下岗了😂 |
71
datou552211 2015-12-14 09:51:45 +08:00 via iPhone
各种规范问题吧,毕竟大部分项目需要合作开发。太灵活了有些场景并不适用
|
72
Feiox 2015-12-16 15:38:35 +08:00
恰恰相反,我除了显式异步这一点不喷 ~ (原谅我已经被 CPS 洗脑)
|