Acts asStateMachineによって提供されるユーザーのステートフルロールを検索するusers_controllerにたくさんのbeforeフィルターがあるrailsアプリに取り組んでいます。彼らはこのように見えます:
class UsersController < ApplicationController
before_filter :not_logged_in_required, :only => [:new, :create]
before_filter :find_user_or_current_user, :only => [:edit, :update]
before_filter :find_user, :only => [:suspend, :unsuspend, :destroy, :purge]
before_filter :admin_required, :only => [:suspend, :unsuspend, :destroy, :purge]
before_filter :check_administrator_role, :only [:index, :suspend, :destroy, :purge]
UsersControllerによって制御される各アクションの状態のこのすべてのチェックにより、パフォーマンスが問題になりつつあり、ユーザー列へのSQLクエリは私のマシンで5ミリ秒以上かかります。
これらのフィルターのすべてがドラッグパフォーマンスに関与していると想定しているだけであり、データベースからの読み取りを改善するためにこれらをリファクタリングするのに最適な方法を考えています。