2015-08-01 6 views
0

У меня есть приложение express.js. Пользователи запрашивают mysite.com/something, и они получают большое количество текста. После каждого запроса мне нужно проанализировать данные (например, найти что-то в тексте и поместить в мою базу данных Redis).Как разбирать большие данные?

app.get('something', function (req, res) { 
    var data = //getting data 
    res.send(data); 
    //parsing data 
}); 

Проблема заключается в том, что анализ данных занимает слишком много времени, и это синхронное, которая означает, что пользователи должны ждать, пока он не закончит, чтобы получить свои данные.

Есть ли способ проанализировать данные в другом .js-файле и позволить пользователям сразу получать результаты?

+0

поместите скрипт разбора в отдельный файл и используйте child_process.exec для асинхронного выполнения файла и возврата вывода в приложении. – hassansin

ответ

2

Если количество данных велико, вам следует рассмотреть возможность использования потоков узлов для его синтаксического анализа. Используйте through2, чтобы легко создавать потоки преобразования. Используя потоки, вы обрабатываете один фрагмент данных (один объект, одну строку csv, один тег xml) сразу же, передавая его в кусок ответа куском.

Также вы никогда не должны использовать синхронный код в своем приложении. Все должно быть асинхронным.

+0

Спасибо, вы можете привести пример? – Taylor

+0

@ Тейлор взгляните на https://www.npmjs.com/package/through2. это хорошая отправная точка, хотя потоки сложны. – krl

+0

Это означает, что если потоковый файл занимает 10 секунд, а предоставление данных пользователю занимает 1 секунду, то все пользователи проводят 1 секунду на моем сайте? – Taylor