当cache_classes为false时,为什么ActiveRecord查询会变慢?

时间:2012-06-01 16:38:03

标签: ruby-on-rails-3 activerecord

我正在使用Rails 3.0.12,在我的开发环境中,当我在开发环境中使用config.cache_classes = false时,ActiveRecord查询非常慢。执行3个查询的控制器操作在本地占用超过200毫秒。

[INFO: 06/01 12:34:16 #10831] Started GET "/api/v1/subscription.json" for 127.0.0.1 at 2012-06-01 12:34:16 -0400
[INFO: 06/01 12:34:16 #10831] Processing by Api::V1::SubscriptionsController#show as JSON
[DEBUG: 06/01 12:34:16 #10831] User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."apikey" = 'xyz' LIMIT 1
[DEBUG: 06/01 12:34:16 #10831] Site Load (0.6ms)  SELECT "sites".* FROM "sites" WHERE "sites"."id" = 1 LIMIT 1
[DEBUG: 06/01 12:34:16 #10831] Subscription Load (1.9ms)  SELECT "subscriptions".* FROM "subscriptions" WHERE ("subscriptions".site_id = 1) LIMIT 1
[INFO: 06/01 12:34:16 #10831] Completed 200 OK in 236ms (Views: 1.5ms | ActiveRecord: 3.3ms)

请注意,实际的AR查询速度非常快,但总时间为236毫秒。另一个不执行任何AR查询的控制器操作需要1毫秒。

当我在开发环境中设置config.cache_classes = false时,运行AR查询的操作将在4ms内执行,如我所料。

每个请求都重新加载AR类吗?我认为cache_classes只处理app目录中的东西。有关如何改进这一点的任何想法?我显然希望使用cache_classes = false运行,所以我不必每次更改都重新启动rails,但我的API运行速度太慢,无法进行任何有意义的测试。

0 个答案:

没有答案