Node.JS,Socket.IO&大型XML文件:极端性能损失?

时间:2011-10-27 06:14:09

标签: xml file node.js socket.io

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

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

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

2 个答案:

答案 0 :(得分:0)

我得到3个可能会提高表现的结论:

  • 使用JSON而不是XML。解析要快得多,有时它的大小比XML要小。您可以使用node-expat将XML转换为JSON。请参阅此benchmark

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

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

答案 1 :(得分:0)

我一直在使用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);

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