class GenericFormatter < Formatter
attr_accessor :tag_name,:objects
def generate_xml
builder = Nokogiri::XML::Builder.new do |xml|
xml.send(tag_name.pluralize) {
objects.each do |obj|
xml.send(tag_name.singularize){
self.generate_obj_row obj,xml
}
end
}
end
builder.to_xml
end
def initialize tag_name,objects
self.tag_name = tag_name
self.objects = objects
end
def generate_obj_row obj,xml
obj.attributes.except("updated_at").map do |key,value|
xml.send(key, value)
end
xml.updated_at obj.updated_at.try(:strftime,"%m/%d/%Y %H:%M:%S") if obj.attributes.key?('updated_at')
end
end
का गुच्छा उपरोक्त कोड में से XML पैदा करने, मैं फ़ॉर्मेटर जहाँ मैं वस्तुओं code.It के अंदर बाहर निकल जाते जोड़ तोड़ द्वारा nokogiri एक्सएमएल बिल्डर का इस्तेमाल किया है एक्सएमएल उत्पन्न करने के लिए लागू कर दिया है, जबकि जब डेटा 10,000 से अधिक रिकॉर्ड की तरह बड़ा होता है तो डेटा अधिक तेज़ नहीं होता है, तो यह उत्पन्न होने के लिए एक्सएमएल धीमा हो जाता है और कम से कम 50-60 सेकंड लेता है।धीमी मॉडल वस्तु
समस्या: क्या एक्सएमएल तेजी से उत्पन्न करने का कोई तरीका है, मैंने एक्सएमएल बिल्डर्स को भी देखने की कोशिश की है लेकिन काम नहीं किया। मैं एक्सएमएल तेज़ कैसे उत्पन्न कर सकता हूं? समाधान समाधान 3 और कोड के ऊपर अनुकूलित करने के सुझावों पर एक आवेदन होना चाहिए?
मुद्दा सिर्फ एक भंडारण कि है 'ऑब्जेक्ट्स' की विशाल सूची आपकी सभी रैम का उपयोग कर रही है? आप ऑब्जेक्ट [बैचों में] को संभालने के लिए कोड को दोबारा कर सकते हैं (http: //api.rubyonrails।org/वर्गों/ActiveRecord/Batches.html)। –
इसके अलावा, यदि आप इसे एक असीमित कार्य के रूप में चलाते हैं तो प्रदर्शन किसी समस्या का * कम * हो जाता है। –
नहीं, यह बड़ी सूची को संग्रहीत करने के बारे में नहीं है, यह ऑब्जेक्ट को xml में हेरफेर करने के बारे में है। अगर हम इसे बैच में विभाजित करते हैं तो यह प्रदर्शन –