我使用node.js和io.socket來編寫應該保存所有消息並向兩個新用戶顯示它們的聊天。 消息被存儲到一個對象數組中。 當我測試它的數量爲2MB(複製&粘貼.txt),我的任務管理器顯示我node.js需要大約200MB!從一開始沒有消息它需要~19MB。 所以我問我是否有任何內存泄漏在我的代碼中,或者也許socket.io保存數組通過.emit在第二個數組中使用?node.js通過使用數組消耗很多ram
這是我的代碼:
save_object=new Array();
save_object['chat']=new Array();//for the chat room,now there's just this one
io.sockets.on('connection', function (socket) {
// client is connected
socket.emit('chat', { time: new Date(), text: 'you are now connected
to the server!' });
//send all msgs on start
socket.emit('all',save_object['chat']);
// user-send event
socket.on('chat', function (data) {
// send msg
io.sockets.emit('chat', { time: new Date(),
name: data.name || 'anonymous', text: data.text });
//save new msg to the array
save_object['chat'][save_object['chat'].length]=
new Object({ time:new Date(), name: data.name || 'anonymous',
text: data.text });
});
});
Err..save_object是一個數組,這意味着「save_object ['chat']」意味着你使用一個字符串索引你的數組,這並不是一個好主意。你可能會考慮讓save_object成爲一個對象?此外,使用[]和{}而不是新的Array()和新的Object()是首選。 – 2015-02-06 20:57:34
對於一個完全成熟的Javascript解釋器來說,19M使用了很多庫,聽起來並不是那麼...我不太習慣node.js,但是不存在某種可以附加到程序中的調試器? – 2015-02-06 20:57:36
@MarcusMüller我認爲你錯過了重要的一點,該過程在插入2MB的文本後使用了200MB的內存。 – 2015-02-06 21:09:15