将 createWriteStream 与 xmlbuilder 一起使用会消耗大量内存

问题描述

我们需要创建一个包含一些项目的 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 (将#修改为@)