레일에서 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_json
calls - 사용자가 호출하지 않는 한 oj를 사용하도록 업그레이드되지 않습니다.Oj.mimic_JSON
initializer로 설정합니다.
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
'programing' 카테고리의 다른 글
WordPress에서 프로그래밍 방식으로 섬네일이 있는 게시물 추가 (0) | 2023.04.02 |
---|---|
Intellissense for Jest는 VS 코드로 동작하지 않습니다. (0) | 2023.04.02 |
angularjs에서 ng-module을 사용한 애니메이션 사용 방법 (0) | 2023.04.02 |
스프링 "spring.profiles.include" 오버라이드 (0) | 2023.04.02 |
Reactjs의 미디어 쿼리 구문 (0) | 2023.04.02 |