homeASCIIcasts

1: Caching With Instance Variables 

(view original Railscast)

Other translations: En It Fr Es Pl Pt

Other formats:

Written by Taewon Shim

	class ApplicationController < ActionController::Base
		def current_user
			User.find(session[:user_id])
		end
	end

이 함수는 지금 로그인한 유저 정보를 가져 옵니다. 더 자세히 말하자면, 세션에 들어있는 user_id로 User 모델의 find를 실행합니다. 이 함수는 한 리퀘스트동안 여러번 불려지고, DB또한 여러번 불려지게 됩니다. (이런 반복은 성능에 않좋은 영향을 미칩니다.) 이 문제는 인스턴스 변수에 쿼리결과를 캐쉬해서 해결할 수 있습니다.

@current_user ||= User.find(session[:user_id])

OR연산에 주목하세요. 처음 이 함수가 불려질때 @current_user변수는 nil값을 가지고있고 DB에도 요청합니다. 이후에 이 함수가 불려질 때,@current_user 는 유저정보를 가지고 있으므로 DB요청도 없습니다. 이 수정은 (수행속도면에서) 성능을 향상시킵니다.

class ApplicationController < ActionController::Base def current_user @current_user ||= User.find(session[:user_id]) end end

인스턴스 변수를 사용하도록 수정된 코드