Аутлогическая производительность?- Любой запрос с помощью SELECT * - PullRequest
2 голосов
/ 26 июля 2010

У меня небольшая проблема с производительностью Authlogic - я работал с ними в течение нескольких дней ... и не могу понять!

Проблема в том, что я использую стандартную установку Authlogic со следующим кодом вapplication_controler для получения current_user (и для продолжения сеанса):

def current_user_session
  return @current_user_session if defined?(@current_user_session)
  @current_user_session = UserSession.find
end
def current_user
  return @current_user if defined?(@current_user)
  @current_user = current_user_session && current_user_session.user
end

Теперь проблема производительности: Authlogic генерирует при каждом запросе к сайту SQL-оператор для сохранения сеанса и возвращает current_user.Но оператор SQL выглядит так:

**User Load (0.3ms)** SELECT * FROM `users` WHERE (`users`.`id` = '1') LIMIT 1

, это SELECT * моя проблема!1. Я не хочу current_user, который имеет все атрибуты из пользовательской модели (есть много вещей, которые я не использую при каждом запросе - например, хобби или предпочтительный_мусик и т. Д. (Много данных)) 2. SELECT * медленнее, чем SELECT a, b, c ...

Я хочу что-то вроде:

**User Load (0.1ms)** SELECT id, name, profilphoto_file_name FROM `users` WHERE (`users`.`id` = '1') LIMIT 1

Но UserSession.find(:select => "id,...") не сработало, потому что .find это метод из Authlogic (сессия / persistence.rb строка 36), а не из ActiveRecord!

Теперь я не знаю, где Authlogic формирует SQL-оператор ???

(мойВторая идея: разделить User-Model на: user и user_details - так что SELECT * от пользователей не слишком слаб, но я бы предпочел взлом Authlogic.)

Спасибо!

...