【问题标题】:Node.JS, Socket.IO & large XML files: extreme performance loss?Node.JS、Socket.IO 和大型 XML 文件:性能损失严重?
【发布时间】:2015-12-29 21:31:25
【问题描述】:

前几天我偶然发现了一个丑陋的问题:我正在使用 XML 字符串在服务器和客户端之间进行通信并交换精确自定义的数据。只要 XML 文件的大小不太大,就可以正常工作。

但在一种情况下,我需要传输一个包含 ~35000 行的 XML 文件,在客户端,它会生成一个包含 ~2200 行的 HTML 表。 在服务器上,我使用fs.readFile() 方法,然后立即发送它的内容。在客户端调用 socket.on('message')-handler 需要很长时间(或者准确地说:最少 6 秒)。

我是 Node.js 的新手,昨天一整天都在谷歌上搜索。有没有人知道如何加速读取 XML 文件并在给定的环境中传输它?

【问题讨论】:

    标签: xml file node.js socket.io


    【解决方案1】:

    我收到了 3 条可以提高性能的建议:

    • 使用 JSON 而不是 XML。解析速度要快得多,而且有时它的大小比 XML 小。您可以使用node-expat 将 XML 转换为 JSON。看到这个benchmark

    • 在服务器端制作表格。服务器显然比客户端快。然后你也可以使用缓存。

    • 我认为最好使用直接 AJAX 调用,socket.io 很重,我不认为它不是为重物而设计的。

    【讨论】:

    • 嘿,Alfred,我认为您使用 JSON 是对的,谢谢!我一定会给这个机会。不幸的是,我现在的任务是看看我在性能方面使用 WebSocket 能走多远,因为全双工通信值得一试......
    • 是的,使用 JSON 将等待时间减少了约 75%!
    【解决方案2】:

    我一直在使用https://github.com/astro/node-expat/blob/master/lib/node-expat.js 来解析一个巨大的 37GB XML 文件。它支持文件流并且运行良好。

    var expat = require('node-expat');
    var fs = require('fs');
    var parser = new expat.Parser("UTF-8");
    // set up your event listeners here
    var fname = "path/to/your/file.xml";
    fs.createReadStream(fname).pipe(parser);
    

    设置 sax 风格的事件监听器非常简单,如果您需要帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 2022-01-02
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2010-11-09
      • 2015-09-15
      相关资源
      最近更新 更多