Nokogiri được thiết kế để xây dựng trong bộ nhớ vì bạn xây dựng một DOM và nó chuyển đổi nó thành XML một cách nhanh chóng. Nó rất dễ sử dụng, nhưng có sự cân bằng, và thực hiện nó trong bộ nhớ là một trong số đó.
Bạn có thể muốn xem xét sử dụng Erubis để tạo XML. Thay vì thu thập tất cả dữ liệu trước khi xử lý và giữ logic trong một bộ điều khiển, giống như chúng ta làm với Rails, để tiết kiệm bộ nhớ, bạn có thể đặt logic của mình vào mẫu và lặp lại dữ liệu của bạn. .
Nếu bạn cần XML trong một tập tin mà bạn có thể cần phải làm điều đó bằng chuyển hướng:
erubis options templatefile.erb > xmlfile
Đây là một ví dụ rất đơn giản, nhưng nó cho thấy bạn có thể dễ dàng xác định một mẫu để tạo ra XML:
<%
asdf = (1..5).to_a
%>
<xml>
<element>
<% asdf.each do |i| %>
<subelement><%= i %></subelement>
<% end %>
</element>
</xml>
đó, khi tôi gọi erubis test.erb
kết quả đầu ra:
<xml>
<element>
<subelement>1</subelement>
<subelement>2</subelement>
<subelement>3</subelement>
<subelement>4</subelement>
<subelement>5</subelement>
</element>
</xml>
EDIT:
Chuỗi nối được dùng mãi mãi ...
Vâng, nó có thể chỉ đơn giản là vì thu gom rác thải. Bạn không hiển thị bất kỳ ví dụ mã nào về cách bạn đang xây dựng các chuỗi của mình, nhưng Ruby hoạt động tốt hơn khi bạn sử dụng <<
để nối thêm một chuỗi với một chuỗi khác với khi sử dụng +
.
Nó cũng có thể làm việc tốt hơn để không cố gắng giữ mọi thứ trong một chuỗi, nhưng thay vào đó để ghi nó ngay lập tức vào đĩa, gắn thêm vào một tệp mở khi bạn đi.
Một lần nữa, không có mã ví dụ tôi đang chụp trong bóng tối về những gì bạn có thể đang làm hoặc tại sao mọi thứ chạy chậm.
Mức độ lớn là bao nhiêu? –
thường chuỗi nối là đủ cho nhiều tác vụ viết xml, tránh xây dựng một cây bất cứ khi nào bạn có thể ... –
Chuỗi nối được lấy mãi mãi. Người xây dựng cũ thường xuyên đã cho thấy sự cải thiện. Tệp có thể lớn hơn gigabyte. – AKWF