前几天我偶然发现了一个丑陋的问题:我正在使用XML字符串在服务器和客户端之间进行通信,并交换精确定制的数据。只要XML文件的大小不是太大,就可以正常工作。
但在一种情况下,我需要传输一个大约35000行的XML文件,客户端会产生一个包含~2200个表行的HTML表。
在服务器上,我使用fs.readFile()
方法,然后立即发送它的内容。在客户端调用socket.on('message')
- 处理程序之前,需要很长时间(或准确地说:最少6秒)。
我是Node.js的新手,昨天整天都在谷歌搜索。有没有人知道如何加速读取XML文件并在给定的环境中传输它只是最微小的一点?
答案 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);
设置萨克斯风格的事件监听器非常简单,如果您需要帮助,请告诉我。