Nodejs @范凯robbin 说 Node 是回到了刀耕火种的年代...
Nodejs @范凯robbin 说 Node 是回到了刀耕火种的年代…
微博原文: http://weibo.com/1654762921/z0sf6p1li
周末在看各种node.js的框架和库,翻了翻github上的的项目,想找些上代码量和架构上规模sample来学习学习。看了半天没找到代码写的漂亮的。nodeclub的项目代码越看我心越凉,从一个RoRer角度看过去,简直回到了刀耕火种的时代。难道我为了事件模型和V8虚拟机竟然要做出如此大的牺牲?
还有另外几条关于 Node 的微博… 真是损自信呐, Rails 真那么好的么? http://weibo.com/robbinfan?from=otherprofile&wvr=4&loc=guipor
标题:Nodejs @范凯robbin 说 Node 是回到了刀耕火种的年代…
内容:
微博原文: http://weibo.com/1654762921/z0sf6p1li
周末在看各种node.js的框架和库,翻了翻github上的的项目,想找些上代码量和架构上规模sample来学习学习。看了半天没找到代码写的漂亮的。nodeclub的项目代码越看我心越凉,从一个RoRer角度看过去,简直回到了刀耕火种的时代。难道我为了事件模型和V8虚拟机竟然要做出如此大的牺牲?
这段话反映了作者作为一位Rails开发者,在初次接触Node.js时的感受。他提到Node.js的代码风格与Ruby on Rails相比显得较为原始,这让他感到不适应。Node.js主要依赖于异步编程和事件驱动模型,这种编程方式与传统的同步编程有较大区别。
示例代码
以下是一个简单的Node.js应用示例,展示了其典型的异步编程模式:
const http = require('http');
// 创建HTTP服务器
const server = http.createServer((req, res) => {
// 模拟耗时操作(例如数据库查询)
setTimeout(() => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}, 2000); // 延迟2秒
});
// 监听端口
server.listen(3000, () => {
console.log('Server is running at http://localhost:3000/');
});
解释
在这个示例中,我们创建了一个HTTP服务器,当接收到请求时会模拟一个耗时的操作(如数据库查询)。这里使用setTimeout
函数模拟了异步操作,这在Node.js中非常常见。当定时器结束时,服务器才会发送响应。这种方式避免了阻塞主线程,使得服务器可以同时处理多个请求。
为什么会有这样的感受?
-
异步编程:Node.js采用非阻塞I/O模型,需要开发者熟悉回调函数、Promise和async/await等异步编程模式。这对于习惯了同步编程的开发者来说可能不太习惯。
-
代码风格:Node.js项目的代码风格通常更简洁,但这也意味着一些开发者可能会觉得缺乏结构化和层次感,特别是对于那些习惯于使用框架(如Rails)的开发者来说。
-
生态系统:虽然Node.js拥有庞大的生态系统,但并不是所有的库和框架都像Rails那样成熟和易于使用。这可能导致开发者在寻找高质量的代码样本时感到困惑。
总的来说,这种感受反映了不同开发环境之间的差异,以及开发者对新环境的适应过程。随着时间的推移和技术的积累,开发者会逐渐适应并掌握Node.js的编程风格和最佳实践。
妹的,竟敢贬低我们cnode社区~
碰到 Ruby 那么复杂的语言也玩转的大神真给跪了… 还有 Rails… 还有写 Haskell 的从理论上不看好 Node… >_< http://blog.jiyinyiyong.info/page/nodejs/said-by-九瓜.wl
觉得nodeclub的代码真的很乱
@范凯robbin 的微博可以看出,他们javaEye也在考虑迁移到 node.js !
- 围观用sloc评价语言优劣的达人逻辑。
- 围观bug多赖语言的达人逻辑。
- 期待iteye开源。
代码虽乱,但技术不可小觑,好的技术也能写出烂的代码,不好的技术也能优化出具有规范的代码风格,既然我们选择了nodejs,就要坚信和坚持的为nodejs铺路搭桥一路扬帆
javascript 的可读性极差这是事实
麻辣矿泉水八宝粥咯…
怎么搞?
要设计新功能了?
莫非要整个 ror-like 框架么……
用异步方式,transaction支持的不是十分顺手。
node-mysql库本身现在还没有支持transaction。在这上面搭建的sequelize.js不支持也是可以理解的吗。
期待~~~
真的没好意思告诉他第一版的nodeclub是一个应届生写的。
现在真的是不适合做数据库应用,我现在的项目本来计划用nodejs,在一个原型后放弃,现在用python已经完成了
不过ruby也不怎么样,虚的东西,吹水的东西太多,不如python 实在
没说原因… 原型出来的时候发现的问题是什么?
其实我们现在已经在用nodejs做高实时性高并发性的服务了,基于socket.io框架写,实时数据存储和队列用Redis。
但做website,特别是比较依赖关系数据库的website,用nodejs真的很不合适,呵呵。
月经贴。鉴定完毕。
robbin说的不是完全没道理。 做web不是不可以, 不过确实没有完全发挥node的优势。
Node.js 与 Ruby on Rails 在设计理念上有很大的不同。Node.js 是基于事件驱动、非阻塞 I/O 模型的 JavaScript 运行环境,而 Ruby on Rails 更偏向于传统的 MVC 架构。因此,在 Node.js 中,可能会缺少一些框架自带的高级功能,比如自动化的 ORM、路由、模板引擎等。
不过,这并不意味着 Node.js 的代码质量一定低于 Rails。Rails 提供了很多开箱即用的功能,但这也可能导致开发者容易过度依赖框架,反而限制了自己的灵活性。Node.js 则更倾向于提供一个轻量级的基础平台,让开发者根据具体需求自由选择合适的库和工具。
以下是一个简单的 Node.js 示例,展示如何构建一个 Web 应用:
const http = require('http');
const url = require('url');
// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
// 解析请求 URL
const parsedUrl = url.parse(req.url, true);
if (parsedUrl.pathname === '/') {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>Hello World!</h1>');
} else {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('Not Found');
}
});
server.listen(3000, () => {
console.log('Server is running at http://localhost:3000/');
});
这段代码创建了一个简单的 HTTP 服务器,处理两个路由(/
和其他路径),并返回相应的响应。在这个例子中,我们没有使用任何框架,只使用了 Node.js 原生模块 http
和 url
。
虽然 Node.js 可能需要开发者更多地关注底层细节,但它提供了更高的灵活性和性能。如果你习惯了 Rails 的高集成度,Node.js 可能会显得不太直观。但一旦掌握了基本概念,你会发现它同样强大且高效。