【发布时间】:2016-03-02 18:54:14
【问题描述】:
我的学生在使用 ActiveRecord for Sinatra 和 Rails 时遇到了一些困难,但他们最终得到了它。
但是,他们在 Sequelize for Node 上完全耗尽了。
在我看来,Sequelize 和 AR 最大的区别在于 AR 是同步的,而 Sequelize 不是。
考虑:
# ActiveRecord
@post = Post.find(2)
render json: @post
// Sequelize
Post.findById(2).then(function(post){
response.json(post);
});
对于像这样的小动作,差异仍然可见,但看起来并没有那么糟糕。对于更复杂的查询,很容易陷入回调地狱。
所以我的问题是:为什么 ActiveRecord 可以同步,但 JS ORM 不能同步?
我了解同步与异步的缺点。但同步性的缺点似乎并没有真正伤害 ActiveRecord。
Sequelize 的难点不仅仅是你要写一千遍.then(function(){});理解回调是如何工作的也需要对 Javascript 有很大的了解,而且由于 Sequelize 是 Node 的主要关系 ORM,它使得 Node 对初学者来说不太容易上手。有人可能会说“初学者不应该使用 Node”,但 Rails 已经取得了巨大的成功,因为它努力让新手开发人员可以使用它。
【问题讨论】:
-
有点过于简单但是...:同步意味着阻塞,异步不是阻塞。当 AR 等待来自 DB 的数据时,它是阻塞的,sinatra 无法处理下一个请求,在节点中等待请求被连续处理。
标签: javascript ruby-on-rails node.js activerecord sequelize.js