我如何使用Nokogiri来编写一个巨大的XML文件?
我有一个Rails应用程序,它在报告功能中使用delayed_job来运行一些非常大的报告。 其中一个会生成一个大规模的XML文件,并且可能需要几天时间才能完成编写代码的糟糕的旧方式。 我认为,在互联网上看到了令人印象深刻的基准,Nokogiri可以为我们带来一些不平凡的性能收益。
但是,我可以找到的唯一示例包括使用Nokogiri Builder创建xml对象,然后使用.to_xml写入整个事物。 但是我的邮政编码中没有足够的内存来处理这个大小的文件。
那么我可以使用Nokogiri来传输或写入这些数据到文件吗?
Nokogiri旨在构建内存,因为您构建了一个DOM,并将其转换为XML。 它很容易使用,但是存在权衡,在内存中执行它就是其中之一。
您可能想要考虑使用Erubis来生成XML。 在处理之前收集所有数据,并将逻辑保存在控制器中(比如我们使用Rails),为了节省内存,您可以将您的逻辑放在模板中并让它遍历数据,这应该有助于资源需求。
如果您需要在文件中使用XML,则可能需要使用重定向来完成此操作:
erubis options templatefile.erb > xmlfile
这是一个非常简单的例子,但它表明您可以轻松定义一个模板来生成XML:
<%
asdf = (1..5).to_a
%>
<xml>
<element>
<% asdf.each do |i| %>
<subelement><%= i %></subelement>
<% end %>
</element>
</xml>
当我打电话给erubis test.erb
输出时:
<xml>
<element>
<subelement>1</subelement>
<subelement>2</subelement>
<subelement>3</subelement>
<subelement>4</subelement>
<subelement>5</subelement>
</element>
</xml>
编辑:
字符串连接正在永远...
是的,它可能只是因为垃圾收集。 你不会展示任何你如何构建你的字符串的代码示例,但是当你使用<<
将一个字符串附加到另一个字符串比使用+
时Ruby更好。
它也可能更好地工作,不要试图将所有内容都保存在一个字符串中,而是将其立即写入磁盘,并随时添加到打开的文件中。
再次,没有代码示例,我在黑暗中拍摄了你可能在做什么或为什么事情运行缓慢。
链接地址: http://www.djcxy.com/p/50703.html