我们需要创建一个包含一些项目的xml文件,因此我们使用xmlbuilder模块来实现这一点。
阵列有50k的产品,处理文件的内存使用量为200mb的ram,但在使用xmlbuilder创建文件时,内存使用量会超过1gb的ram,现在我们可以处理,但服务器在某些时候会耗尽内存。
这是我正在使用的函数,我需要找到一种方法,在不消耗大量ram的情况下处理文件。生成文件的时间不是问题,我们可以等待,但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");
});
如果有任何关于如何创建此文件的想法,将很好,谢谢
暂无答案!
目前还没有任何答案,快来回答吧!