我似乎无法弄清楚为什么我的总渲染时间与我的活动记录时间 + 我的生产日志中列出的查看时间不匹配。
这是我的生产日志的输出:
在 12508 毫秒内完成 200 OK(查看:0.3 毫秒 | ActiveRecord:46.0 毫秒)
这是我的控制器中的代码:
store = Store.find(:vanity_url => params[:vanity_url])
render :json => store.get_pages_with_includes
return false
在我的 Store.rb 模型中,我使用两种方法来渲染模型的 json 表示及其所有活动关系。这是急切的加载方法:
def eager_load_pages
pages = Page.where(:store_id => self.id).includes(
[{:menu_items =>
[
:sizes,
{:topping_groups =>
{:toppings => :sizes}
}
]
},
{:combos =>
{:combo_item_groups =>
{:combo_items =>
[
:sizes,
{:topping_groups =>
{:toppings => :sizes}
}
]
}
}
}]
).order('position ASC')
return pages
end
这是 to_json 方法
def get_pages_with_includes
pages = self.eager_load_pages
return pages.to_json({:include =>
[{:menu_items =>
{:include =>
{:topping_groups =>
{:include =>
{:toppings =>
{:include =>
:sizes
}
}
}
}
}
},
{:combos =>
{:include =>
{:combo_item_groups =>
{:include =>
{:combo_items =>
{:include =>
[:sizes, :topping_groups =>
{:include =>
{:toppings =>
{:include =>
:sizes
}
}
}
]
}
}
}
}
}
}]
})
end
所有的代码都在工作,我不确定我是否可以让它更有效率。我感到困惑的是为什么总页面加载时间甚至不接近运行查询所需的时间。谁能帮我吗?请??从技术上讲,该页面的加载时间应该少于 50 毫秒,但它需要 12508 毫秒!
任何帮助将非常感激!
----------UPDATE------------ 我从我的服务器运行 top 并注意到在这些查询期间 ruby 占用了 100% 的 CPU。这里有什么想法吗?也许这指出了问题......?