나는 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 문서를 만들었습니다. 실제로 작동하지만 실제로는 두 번 느립니다. !
이 방법을 개선하거나 병목 현상을 식별하는 방법에 대한 아이디어가 있으십니까?
"to_plist"방법의 기능은 무엇입니까? –
to_plist 메소드는 plist gem에서 가져온 것으로, 지정된 해시를 문자열 형식의 plist (즉, q에 표시된 XML 문서 형식)로 자동 변환합니다. – frankodwyer