1

我们需要创建一个包含一些项目的 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");
  });

如果有任何想法如何创建这个文件,会很好,谢谢

4

0 回答 0