Node.JS, Socket.IO и большие XML-файлы: экстремальная потеря производительности? - PullRequest
0 голосов
/ 27 октября 2011

На днях я натолкнулся на ужасную проблему: я использую строки XML для связи между сервером и клиентом и обмена точно определенными данными. Работает нормально до тех пор, пока размер файла XML не слишком велик.

Но в одном случае мне нужно передать файл XML с ~ 35000 строками, что на стороне клиента приведет к созданию таблицы HTML с ~ 2200 строками таблицы. На сервере я использую метод fs.readFile(), а затем сразу отправляю его содержимое. Требуется время (или, если быть точным: минимум 6 секунд), пока на клиенте не будет вызван обработчик socket.on('message').

Я новичок в Node.js и вчера весь день гуглял. У кого-нибудь есть идеи о том, как ускорить чтение XML-файла и передачу его в заданной среде, хотя бы малейший кусочек?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2012

Я использовал https://github.com/astro/node-expat/blob/master/lib/node-expat.js для анализа огромного 37-Гбайт 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);

Настройка прослушивателей событий в стиле саксофона довольно проста, дайте мне знать, если вам нужна помощь.

0 голосов
/ 28 октября 2011

Я получил 3 предложения, которые могут повысить производительность:

  • Используйте JSON вместо XML.Гораздо быстрее разобрать, и иногда он имеет меньший размер, чем XML.Вы можете использовать node-expat для преобразования XML в JSON.См. Этот тест .

  • Составьте таблицы на стороне сервера.Серверы, очевидно, быстрее, чем клиенты.Тогда вы также можете использовать кэширование.

  • Я думаю, что лучше использовать прямые вызовы AJAX, socket.io тяжелый, и я не думаю, что он не предназначен для тяжелых объектов.1017 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...