主动管理员减慢了rails应用程序

我在工作的rails应用程序中安装了active_admin gem。 这样做之后,应用程序显然放慢了速度。 获取新页面大约需要4-5秒。 某些function被破坏了。

这可能是由于主动管理员依赖于设计和冲突,因为我有自己的身份validation吗? 我已经有了一个User模型,其中包含’current_user’和登录function等方法。

换句话说,除非使用设计进行身份validation,否则不应该使用活动管理员? 我在文档中没有看到任何相关内容。

我在Rails 3.1,Postgresql数据库,如果这很重要。

Rails 3.1中的速度减慢是一个已知问题 ,主要是由于Active Admin与新资产管道交互的方式。 问题是 – 就我所知 – 仅在开发模式下运行时出现(所以当你部署到生产时它应该消失)。

在开发中还存在可能对性能产生影响的内存泄漏问题 。 但我个人的经验是,这不是主要的性能杀手。

为了克服开发中的缓慢环境问题,一个快速解决方法是安装rails-dev-tweaks gem。 当传入请求是资产请求(images,css,js等)时,这将阻止Rails重新生成资产。

至于你的第二个问题:Active Admin只适用于设计。 但是完全可以在前端使用不同的身份validation机制,并且只依赖于Active Admin中的Devise。 您应该确保Devise和您自己的身份validation不会发生冲突。 您可以更改设计和活动管理员以使用不同的方法来检索当前用户。 默认情况下,Active Admin使用current_admin_user – 而不是current_user 。 您可以在config/initializers/active_admin.rb更改Active Admin的身份validation设置。 有关详细信息,请阅读身份validation文档 。

如果您的管理模型具有belongs_tohas_many关系,则ActiveAdmin的默认行为实际上会将您的数据库加载到RAM中。 建议您只添加真正需要的filter。

为每个filter集合指定确切的字段也将大大减少查询执行时间和内存占用。 默认情况下,ActiveAdmin正在查找:id和:name属性。 我应用此查询的一个查询从几秒减少到.7ms。 是!!

例如

 filter :account, collection: Account.unscoped.select('id, name')