我们需要创建一个包含一些项目的 XML 文件,因此我们为此使用 xmlbuilder 模块。
该数组有50k的产品,处理文件的内存使用量是200mb的ram,但是在使用xmlbuilder创建文件的那一刻,内存使用量超过了1gb的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");
});
如果有任何想法如何创建这个文件,会很好,谢谢