很多困惑
有些书写node是第一个使用js作为后台的编程语言,难道他们不知道ASP早就使用了么?
如果ASP支持新版的js,并且增加异步功能,实现跨平台,那还有node什么事?当然现在无法实现。
node 繁琐的路由机制,不应该在node的本身exe,作为一个服务器实现么?这样就简单多了,效率也会提升,那为什么不完善?至少可以提供一个开关,决定是否启用这项功能,这样也会简单多了。路由为什么exe本身不完善?
目前一次只能node一个js应用,虽然可以开多个端口、借助cluster,但任意多就不行,问题是都要用一个端口,怎么解决?一百个应用,一百个端口?比如一个网站有100个js应用,启动服务node index.js,应用app1.js,app2.js……app100.js都是通过index.js路由,无法绕过路由这一关,直接访问。
php也可以实现异步非阻塞,那么node的意义何在?是前端不想学习语言的借口么?
php占大多数,便于扩展、使用现成的程序,node有什么优势?
很多接口提供php的,但很少有node,造成不便,如何解决?
npm 数量虽多,但质量参差不齐,用于生产,恐怕有风险,所以npm数量衡量node的优势,有意义么?
搭建服务器方面,如何实现多个网站,多个域名,多个二级子域名?并实现安全隔离。有成熟方案么?并解决安全问题,node本身不能解决这些问题吧?
速度方面,测试都是极端,但一般用似乎没有什么特别的感觉?是这样么?
设想
看了楼下的go-server-js案例,的确似乎是想要的,但还不接接近。
感觉node就是把V8放到服务器上的技术,但是发明人似乎就此止步了。于是本来应该由服务器完成的工作,变成了js脚本的工作,大量路由由脚本完成。
如果搭建环境,比如linux+node+框架或自己写的路由和服务器的功能,便形成一个基本的服务器。 三部分组成:1,操作系统,2,node,3,由库、框架或自己写的脚本实现的服务器功能。
但是正如前面困惑所说的,麻烦、效率低,安全不安全另说。
于是设想将第三部分,加入到node中,重新改造node,形成node server,实现服务器的功能。 如果借鉴ASP的五大对象,进行重构,也就是复活了ASP技术。
最后形成两部分:1,操作系统,2,node服务器
微软无法从ASP上薅羊毛了,实际上ASP已经死掉了,虽然.net5出来了,也实现了跨平台,但是为了使用ASP,仅安装就已经过大,和node的方向背道而驰。
所以,如果可以设计出node server,当然不一定还叫 node,实际上也不应该再叫node,因为node是人家的资产。
突破
目前中国程序员在node领域贡献了两个世界级的应用,NW.js和Electron,虽然不是完全的底层技术,但在服务器底层技术方面,目前似乎没有什么叫得响的接近底层的技术。
node发明人干到一半,放弃了,node并没有突破太多,将V8向服务器方面发展,反而止步于脚本实现,似乎受前端影响太大。
这是node的特点,但反过来,一定意义上,也是node的缺陷。虽然V8已经很快,但需要更底层、更快、更快。
发明人又另起炉灶deno,似乎仍在以前的圈里打转,只不过换了语言,以及引用包的机制。这与前面的设想的差别太大。
所以,感觉这里存在巨大机遇。
即,采用V8,结合apache服务器的技术,再结合ASP的技术,形成node server。最终形成:操作系统+node server的组合。
实现跨平台,轻量化,借助庞大的js语言用户群,实现ASP的复活、与php的抗衡。
如果不想做高度集成的node server,仅将ASP技术吸收到node server中,也是一个有竞争力的产品。最终形成:操作系统+服务器+node server的组合。
最后这东西,有点像tomcat,没有apache,tomcat也可以实现Java引擎和服务器的功能。这也是node server的终极目标。
当然,不能再叫node了,可以起个新的名字,毕竟是新的产品。
另外,最重要的一点,必须开源,不开源,没人敢用。js世界的东西都是开源的,v8也是开源的。
楼主提了很多问题,也是很好的问题,nodejs的崛起我觉得和前端的崛起有很大关系,这也不代表nodejs真的很好,很强。但是对前端来说,前后端一致的好处很多,也因为nodejs,前端人也多了一把利器,把领地拓展到其他地方。另外,起多个端口那个问题不是很理解楼主意思。起端口在nodejs有什么限制?
我给新手的建议是:别把其它语言的设计思想带到node上,尤其是java,node和go本身应用起来是很简单的,你用nodejs写几个项目就知道它有多爽了 如果你喜欢php,你可以试试我几年前做的一个有趣的小玩意:https://github.com/zengming00/go-server-js
相对服务端nodejs优势已经不明显,js更靠近客户端 不如用js写客户端吧 直接生成机器码双击运行 https://html-notepad.com/ 下载试用
asp不是c#吗,,php性能差啊,js能全栈语言统一成本低啊,端口问题可以加一层负载均衡啊,,你是想把nodejs改造成windows上的点点点桌面程序吗
没读到过这种书,不了解。11 年用过 PHP/ASP/JSP,不太理解你说的早就使用过是指什么,是指渲染出来的前端页面可以调用 JavaScript 还是指内置了一个 JavaScript 引擎可以服务端执行用户的代码。如果是后者的话,在服务端执行 JavaScript 代码,在 Node.js 诞生之初(09年) V8 就是比较优秀的选项,现在已经是个无疑义的选项,微软一直没有办法超越(查克拉已死),所以如果说要在后端跑 JavaScript 代码的话,各路语言早不早其实都不重要,重要的是要使用 V8。
ASP 支持 js 并增加异步功能,实现跨平台。怎么说呢,不符合微软的发展方向,从上个世纪开始微软的大方向一直都是,“一个平台,所有语言”,也就是希望开发者们都跑到微软自家的平台上去,支持跨平台不是给他们自家挖角吗(现在微软的思想已经放开了,但是也就那样把,早就过了跨平台风口了)。异步功能怎么说呢,这东西很早就有了,很多古早的语言其实都有使用 libevent 之类的库开发异步程序,只是太难用了。如果能在语言层面封装,确实可以极大的提高生产力。
总得来说这个问题问得不太有水平,更合理一点问应该是问,为什么不是 Node.lua、Node.py … 而是现在的 Node.js。如果你是 js 厨的话,ASP or 其他啥发展到 Node 现在的规模其实只是历史的轱辘转到了它该转的地方。
看不太懂问题。
都要用一个端口可以使用 Nginx 做反向代理。端口丢给 Nginx 这样的 web server 即可,这也是 PHP 这样的语言实现的思路,PHP 本身也是不监听端口的而是通过对应的 web server 来listen请求(例如 Nginx、Tomcat 等),而 Node.js 集成了一定 web server 的功能所以比 PHP 要简单一些,直接可以启动起来监听端口,不过复杂一点的应用也可以回到 web server 的模型下。
一个网站有 100 个 js 应用,除了上述通过 web server 反向代理,还可以考虑使用微服务(RPC 等)方式来处理。一般来说,一个大型的门户网站背后有几百个应用的组织方式应该是十分成熟且与语言无关的。
这种车轱辘话我也可以随口遍很多出来:
不抖机灵的说,Web 应用的开发应该是跟语言无关的,基础知识就那么点,学明白了用啥语言都差不到哪去。无非是团队选型、招聘成本等外场因素,不存在说一定要怎么样。
Node.js 优势不大,JavaScript 优势大。会 JavaScript 开发者占程序员的大多数。好招聘,人口基数在,未来可期。
举个例子,上个世纪 C 刚流行的时候,很多擅长汇编的会觉得 C 编译出来的汇编太慢了,所以即使用了 C 语言也会在特定的地方使用汇编,但是慢慢的就没人这么做了。为什么,因为摩尔定律的存在,应用对于内存等指标越来越宽松,直接用 C 更简单的情况下最终结果就是大家都直接用 C 语言。JavaScript 也是一个被预言成有这种潜力+趋势的语言。
PHP 提供的接口不是 HTTP 吗?如果是 HTTP 的那么接入的方式应与语言无关,而与提供接口的人有关。
经典车轱辘问题吧。不看看隔壁 Java 的 maven 吗,maven 的包也很多,质量也参差不齐,没人吐槽吗?阿里巴巴的 FastJson 每隔一段时间都报个大 BUG,除了阿里的 Java 谁想去吃这坨 x,可是就这样你看他们(社区 Java 开发)吐槽的是 maven 吗?正常人吐槽的都是阿里吧?
对于平台而言,重要的不是个体如何而是规模如何,只要规模上来了,那么出现精品只是时间问题。人是社会性动物,在足够大规模的平台下肯定能碰撞出好的东西。而且开源人的想法,落到具体的技术产品上也是想被人看见的,同样写一个 curl 的 lib,用 golang 写如果只有 1000 人能试用到(几十个star),但是用 NPM 你能让 10000 人用到(几百个star),那么你会选择哪个平台来落地你的想法?很多这些东西都是在规模大到一定程度就可以潜移默化的。笼统的说,就是生态影响力。
em,这个问题问出来,感觉你需要认真学习一下 HTTP 协议。Node.js 可以解决这些问题,你开心的话用 C 语言 or 汇编都行,这都是跟语言无关的事情,只需要要你了解 HTTP协议即可。成熟的方案来说一般不会用 Node.js 实现(虽然我写过… 在用 Node.js 写网关的时候),因为管理这些东西的人通常来说都是网络工程师 or 运维工程师而不是 Web 开发。
大部分人开发的时候都触摸不到用户体验在性能上的天花板,就好像大部分人工作中都遇不到高并发场景一样。性能主要是个适合装逼和面试场景的领域。也就是经典的造核弹和拧螺丝的差别,咱们还是多讨论一下螺丝的型号啥的比较实在。
@zengming00 嗯。赞同。
楼主是受其它程序语言影响了(都还上升不到语言层面上来)。建议对底层原理实现有一定了解比较好。