2009-08-07 2 views
0

나는 Ruby on Rails에서 plist로서 객체의 큰 (ish) 배열을 렌더링하려하고있다. 컬렉션에는 현재 최대 200 개의 개체가 포함되어 있으며 각 개체는 본질적으로 레코드 (키/값 사전)입니다. 전체 결과 형식은 plist (Apple에서 사용)이지만 논리적으로 XML 문서와 크게 다르지 않습니다.루비/레일에 대규모 XML 컬렉션을 렌더링하는 효율적인 방법은 무엇입니까?

내가 겪었던 문제는 배열에 200 개 개체가 약 두 번째 걸린다는 것이고 이것은 나에게 상당히 느린 것 같습니다. 나는 현재 다음과 같은 코드를 사용하고 있습니다 : 다음 클라이언트로 전송됩니다

def plistify(collection) 
    resultarray=Array.new() 
    collection.each do |entry| 
     hash= entry.attributes 
     hash["credits"]= entry.credits 
     hash["ratingcount"]= entry.ratings.count 
     hash["entryrating"]= entry.detail_rating 
     hash["entryratingcount"]= entry.entryratingcount 
     resultarray << hash 
    end 
    {'entries'=>resultarray}.to_plist 
    end 

사용하여 : 거의 모든

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>entries</key> 
    <array> <-- corresponds to resultarray above 
     <dict> <-- corresponds to a single entry's attributes above. one of these per entry. 
      <key>cached_review_id</key> 
      <integer>190</integer> 
      <key>cached_tag_list</key> 
      <string>pub restaurant food waitress</string> 
      <key>created_at</key> 
      <date>2009-05-31T13:47:10Z</date> 
        ...about 20 key/values... 

등 :

format.text {render :text => plistify(@entries)} 

결과 출력과 같이 보입니다 오버 헤드가 루비 'plistify'코드에 있습니다 - 데이터베이스 오버 헤드가 비교하여 최소한입니다.

오버 헤드가 임시 루비 객체를 많이 생성 한 것으로 가정하고이 모든 것을 뷰로 바꾸고 뷰의 빌더를 사용하여 동일한 XML 문서를 만들었습니다. 실제로 작동하지만 실제로는 두 번 느립니다. !

이 방법을 개선하거나 병목 현상을 식별하는 방법에 대한 아이디어가 있으십니까?

+0

"to_plist"방법의 기능은 무엇입니까? –

+0

to_plist 메소드는 plist gem에서 가져온 것으로, 지정된 해시를 문자열 형식의 plist (즉, q에 표시된 XML 문서 형식)로 자동 변환합니다. – frankodwyer

답변

1

plist gem 자체를 해킹하지 않고도이를 향상시킬 수 있는지 잘 모릅니다. "svn checkout http://plist.rubyforge.org/svn/"및 here 저장소의 소스 코드를 살펴보면 XML 라이브러리 (예 : LibXML, Nokogiri 또는 builder)를 사용하는 것과는 대조적으로 보석이 자체적으로 XML을 생성하는 것처럼 보입니다.

이러한 라이브러리 중 하나를 사용하면 XML을 생성하는 데 얼마나 많은 차이가 있는지 (필자는 구문 분석시 분명히 빠름) 확신 할 수 없지만 최적화 기회를 찾는 첫 번째 논리적 인 장소로 보인다.

관련 문제