【发布时间】:2017-12-02 18:23:12
【问题描述】:
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
在上面的代码中,我已经实现了格式化程序,我使用 nokogiri XML Builder 通过操作在代码中传递的对象来生成 XML。如果数据不是太大,它会生成更快的 XML如果大于 10,000 条记录,则生成 XML 的速度会变慢,至少需要 50-60 秒。
问题: 有什么方法可以更快地生成 XML,我也尝试了 XML Builders on view 但没有用。我怎样才能更快地生成 XML?解决方案是否应该是 rails 3 上的应用程序以及优化上述代码的建议?
【问题讨论】:
-
存储大量
objects列表是否会耗尽所有内存?您可以重构代码以处理对象in batches。 -
此外,如果您将其作为异步任务运行,那么性能将成为较少的问题。
-
不,这不是存储庞大的列表,而是将对象操作到 xml。如果我们将其分成批次,则不会影响性能
-
是
objectsrails 型号吗?如果是,它们有关联吗?协会有协会吗?如果是这样,您希望您的 XML 有多深?是否从数据库中获取了所有关联?有没有潜在的无限递归? -
Aetherus Zhou 是的,它们是 Rails 模型,但只有一个模型数据没有关联数据。但是数据量很大
标签: ruby-on-rails ruby xml ruby-on-rails-3 nokogiri