问题描述
我们需要创建一个包含一些项目的 XML 文件,因此我们为此使用了 xmlbuilder 模块。
该数组有 50k 个产品,处理文件的内存使用量为 200mb ram,但在使用 xmlbuilder 创建文件的那一刻,内存使用量超过 1gb ram,现在我们可以处理但是服务器会在某些时候耗尽内存。
这是我正在使用的功能,我需要找到一种方法来处理文件而不消耗大量内存。生成文件的时间不是问题,我们可以等待,但内存使用是一个大问题。
const fs = require("fs");
const products = [...new Array(50000)].map((item,i) => ({
_id: i,name: "productName",description: "productDescription",currency: "USD",salePrice: 100,img: ["https://productLink.com"],productAvailability: true,slug: "product-slug",}));
let items = [];
for await (const product of products) {
const item = {
id: product._id,title: product.name,description: product.description,image: product.img[0],availability: product.productAvailability ? "in stock" : "out of stock",price: `${product.salePrice} ${product.currency}`,};
items = [...items,item];
}
let obj = {
RSS: {
channel: {
item: items,},};
const root = xmlbuilder.create(obj,{ encoding: "utf-8" });
const writeStream = fs.createWriteStream("file.xml");
const writer = xmlbuilder.streamWriter(writeStream);
const xml = root.end(writer);
(obj = {}),(items = []),(xmldoc = ""),(products = []); // Declare all to empty to reduce node cache
writeStream.end();
writeStream
.on("error",(error) => {
throw error;
})
.on("finish",async () => {
console.log("done");
});
如果对如何创建此文件有任何想法,那就太好了,谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)