0

我使用的是 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 查询的操作会在 4 毫秒内执行,正如我所期望的那样。

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

4

0 回答 0