programing

레일에서 json을 렌더링하는 가장 빠른 방법은 무엇입니까?

lastmoon 2023. 4. 2. 11:47
반응형

레일에서 json을 렌더링하는 가장 빠른 방법은 무엇입니까?

Rails 응용 프로그램에서 느린 트랜잭션을 최적화하고 있는데 JSON 뷰를 렌더링하는 데 상당한 시간이 소요됩니다.

Rendered welcome/index.json.rabl (490.5ms)
Completed 200 OK in 1174ms (Views: 479.6ms | ActiveRecord: 27.8ms)

API 호출이 반환해야 하는 데이터를 정확하게 반환한다고 가정할 때 JSON을 레일에서 렌더링하는 가장 빠른 방법은 무엇입니까?

코드를 쉽게 공유할 수 있기 때문에 Rabl을 사용하고 있습니다만, 거기에 얽매이지 않습니다.

현재 oj는 yajl을 제치는 가장 빠른 렌더러인 것 같습니다(oj 작가의 비교).

Oj는 최신 multi_json에서 기본적으로 사용되므로(또한 rails는 기본적으로 mutli_json을 사용), Oj로의 스왑은 Gemfile에 다음 항목을 추가하는 것만으로 간단합니다.

  # Gemfile
  gem "oj"

그런 다음 렌더를 호출할 때마다 oj가 사용됩니다.

  render :json => { ... } # uses multi_json which uses oj

OJ는 더 높은 성능을 원하는 경우 특정 인터페이스를 추가로 제공하지만, multi_json을 고수하면 향후 보석 교환이 더 쉬워집니다.

주의해 주세요.{ ... }.to_jsoncalls - 사용자가 호출하지 않는 한 oj를 사용하도록 업그레이드되지 않습니다.Oj.mimic_JSONinitializer로 설정합니다.

Rails 3은 multi_json을 사용하지만 인코딩이 아닌 json 디코딩에만 사용합니다.Json 인코딩/렌더링/생성은 ActiveSupport JSON 라이브러리의to_json따라서 (Oj gem을 사용하더라도) 항상 느립니다.

multi_json을 사용하여 명시적으로 렌더링할 수 있습니다.

render :json => MultiJson.dump(@posts)

또는 기본적으로 multi_json을 사용하는 rails-patch-json-encode gem (by me)을 사용해 볼 수도 있습니다.모든 빌트인에 영향을 줍니다.to_json모든 테스트를 통과해야 합니다.

Rabl 사용multi_json플랫폼 간 호환성을 위해 기본적으로는 매우 빠른 Yajl 라이브러리를 사용하지 않습니다.Rabl의 설정 매뉴얼에는 다음과 같은 솔루션이 기재되어 있습니다.

# Gemfile
gem 'yajl-ruby', :require => "yajl"

그래도 성능이 충분하지 않은 경우에는 oj와 같은 다른 JSON 시리얼라이저를 사용해 보는 것이 좋습니다.렌더링을 계측하여 병목 현상이 존재하는 위치를 확인할 수도 있습니다.

넷플릭스는 최근 기본 라이브러리보다 25배에서 40배 더 빠른 새로운 JSON 렌더링 라이브러리를 출시했다.공지사항입니다.코드. 이를 활용하려면 새로운 시리얼라이저를 만들어야 하지만 영향을 받는 사람들에게는 큰 장애가 되지 않을 것 같습니다.

언급URL : https://stackoverflow.com/questions/10451722/what-is-the-fastest-way-to-render-json-in-rails

반응형