【发布时间】:2017-03-21 12:26:39
【问题描述】:
如何将大数据从 NodeJS 发送到客户端? 我试过这两个: 1. Socket.io 请求 2.ajax GET请求 但是两种方式都很慢。 我正在使用 mongoDB。数据大小将是 1,000,000+ 个对象(1-2GB),但即使发送 10,000 个数据,速度也很慢。 我怎样才能让它更快? (从MongoDB到NodeJS的数据读取时间没问题。)
这是 Socket.io 代码
=>NodeJS
io.sockets.on('connection', function(socket) {
socket.on('getData', function() {
var items = TestModel.find();
items.find({},function(err,obj){
for(var i=0;i<obj.length;i++){
socket.emit('responseData', obj[i]);
}
socket.emit('complete',"Item length : ");
});
});
});});
如果我使用socket.emit('responseData', obj),我会得到一个溢出错误
=> 索引.HTML
<html>
<head>
<meta charset="utf-8"/>
<script src="/socket.io/socket.io.js"></script>
<title></title>
</head>
<body>
Socket.io Test
</body>
<script>
window.onload = function() {
var socket = io.connect();
socket.emit('getData');
var i=0;
//socket.emit('getName');
socket.on('responseData', function(data) {
i++;
});
socket.on('complete',function(data){
alert(data+i);
});
};
</script>
</html>
这是 Ajax GET 代码
=>NodeJS
app.get('/load',function(req,res){
var items = TestModel.find();
console.log("Model loaded");
items.find({},function(err, obj){
res.send(JSON.stringify(obj));
console.log("Sent Models");
});
});
=> 阿贾克斯
$(function(){
$(document).ready(function(){
$.get('/load', {}, function(data){
...
});
});});
【问题讨论】:
-
大数据有什么用?客户端是否绝对需要一次全部 2GB?
-
是的。这是基因组数据。真的很大。
-
慢到底是什么?是网络 IO 还是
JSON.stringify(obj)之类的东西?剖析师怎么说?
标签: javascript ajax node.js mongodb sockets