2012-02-23 2 views
1

레일에서 작업하기 3.2.1, 나는 다수의 JSON 요청을 수행하고 Yajl을 사용하여 반환 된 데이터를 파싱하는 응용 프로그램을 작성하고 있습니다. 나의 딜레마는 날씨이거나 Yajl 파서 객체에게 JSON 데이터가 요청 될 때마다 초기화하지 : 다음과 같이다수의 Yajl 파서 객체와 하나의 전역 파서 객체

json = StringIO.new(some_jason_object) 
#hmm I need something to parse this json data 
parser = Yajl::Parser.new 
hash = parser.parse(json) 

또는 파서 config/initializers/yajl_parser.rb의 글로벌 상수 PARSER = Yajl::Parser.new 초기화하고 내 응용 프로그램에서 호출하는 :

json = StringIO.new(some_jason_object) 
hash = PARSER.parse(json) 

Yajl이 데이터를 구문 분석하도록 요구하는 요청이 대부분의 페이지 요청에서 이루어 지므로 어떤 구현이 최상의 성능을 제공 하는지를 고려하십시오.

답변

0

단순히 Yajl::Parser.parse json_string을 사용하는 것이 잘못된 이유는 무엇입니까? 이 맥락에서 많은 차이를 만들어서는 안됩니다.

+0

내 생각에 상수를 만들거나 초기화 된 객체를 계속 재사용하면 객체가 메모리에 캐시 될 가능성이 있지만 Ruby 또는 Ruby on Rails의 방향을 이해하지 못하기 때문에 성능이 향상 될 수 있습니다 충분한 정보를 바탕으로 한 결정을 내릴 수 있습니다. – rudolph9

+0

저는 Ruby on Rails를 채택한 이후로 이와 비슷한 질문을 자주하곤합니다. 저는 학교에서 HPC를 사용하여 여러 학기를 공부했으며, 루비가 메모리 관리를 어떻게 처리 하는지를 더 잘 이해하고 싶습니다. 특히 Ruby on Rails 애플리케이션. – rudolph9

+1

흠, 나는 Ruby on Rails로 거의 작업하지는 않았지만 Ruby가 메모리 검사 [이 프레젠테이션]를 처리하는 방법에 관심이 있다면 (http://timetobleed.com/garbage-collection-slides-from-la-ruby-conference /); YARV를 사용하면 프레젠테이션과 약간 다를 수 있습니다. 'Yajl :: Parser'는 이미'parse'를 보내는 상수입니다. – omninonsense