道歉,如果这个问题有点愚蠢,但如果一个应用程序有一个或多个关联的模型,是否有任何负面影响?例如,对于需要用户模型的复杂应用程序(例如,社交网站),模型可能具有15个以上的关联(has_many :posts, has_many :messages, has_many :photos, has_many :friends
等等)是合理的。如果一个模型与其他模型密切相关,这是否会对应用程序的性能产生负面影响?如果是这样,最小化问题的最佳方法是什么?
答案 0 :(得分:5)
Rails中的Models之间的关联实际上只是在幕后操纵id值。这些是非常高性能的操作,特别是如果您的数据库支持它,您花时间设置外键关系。除非您要求,否则ActiveRecord也不会加载任何内容,因此通常只有在您处理这些关系时,它们才会被转换为SQL服务器的JOIN。
由于您的示例中的帖子,消息,照片或朋友已创建,ActiveRecord会自动为您设置user_id
列。这就是has_many
协会所涉及的一切。
过早优化是万恶之源。在您确定了分析瓶颈之前不要担心。
答案 1 :(得分:3)
嗯,我能提供的第一条建议是快速制作原型,看看它是如何运行的。
对于关联的限制,ActiveRecord默认使用延迟关系。因此,加载用户不会自动加载帖子,消息,照片,朋友等,直到您要求它们为止。这对您来说通常非常有用,因为您可能不需要在消息页面上显示所有照片。
以下是一些链接,其中包含有关优化ActiveRecord的一些提示,以获取更深入的信息: http://www.ibm.com/developerworks/web/library/wa-rails3/