
Rails의 enum이 생성하는 메서드에서 동적 호출을 줄이는 변경이 Rails PR로 제안됐다. 글에 실린 shippable? 마이크로벤치마크에서는 일반 Ruby 실행 처리량이 초당 1.721M회에서 3.145M회로, YJIT에서는 3.568M회에서 16.274M회로, ZJIT에서는 3.812M회에서 18.509M회로 높아졌다.
기존 구현은 define_method 블록 안에서 public_send로 메서드를 호출하고 enum 값을 바깥 환경에서 가져왔다. PR은 module_eval로 일반 메서드처럼 코드를 생성해 메서드를 직접 호출하고 enum 값을 생성된 메서드에 포함하는 방식으로 바꾼다. 구현에는 module_eval을 직접 사용하는 대신 ActiveSupport::CodeGenerator를 적용했다.
enum 이름에 루비 식별자가 아닌 값이 들어가는 경우와 부동소수점 값의 직렬화·복원 문제도 고려해야 했다. 제안된 변경과 구현 세부사항은 Rails PR에서 확인할 수 있다. 성능 수치는 글에 제시된 shippable? 마이크로벤치마크 결과이며, 다른 사용 사례의 성능을 보여주는 것은 아니다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요