2013-09-26 2 views
1

Рассмотрим этого код:Node в процессе расслоения плотного запроса

var http = require("http"); 
http.createServer(function(request, response) { 
    for (var i = 0; i < 1000000; i++) { 
     console.log("Request received"); 
    } 
    response.writeHead(200, { 
     "Content-Type": "text/plain" 
    }); 
    response.write("Hello World"); 
    response.end(); 
}).listen(8888, "127.0.0.1"); 

Если мы запустим этот код, мы должны ждать много минуты тоже получить response.But если запустить для без console.log("Request received"); в течение получает ответ с высокоскоростной? Почему?

+3

Вы предполагаете, что что-то записывать на консоль/журнал так же быстро, как не выполнять никаких операций? Зачем? – WiredPrairie

ответ

0

Я думаю, потому что пишу console.log("Request received"); в консоли, чтобы получить время процесса.

1

console.log довольно медленный, как и любой другой print/echo/sysout, который что-то делает на вашей консоли STDOUT.

EDIT: В дополнение к этому интерпретатор просто пропустит цикл, если в нем нет операции. Если вы действительно что-то делаете в этом, это, конечно, займет время.

+0

Вы уверены, что цикл будет пропущен? В состоянии и шаге цикла могут возникать важные вещи. Изменить: на самом деле цикл запускается. Вы можете видеть это с помощью циклов синхронизации с пустым телом, но с разными ограничениями - более высокий предел для 'i' будет работать дольше. –

+0

@AaronDufour Очень интересно, спасибо за информацию. Я думал, что V8 проанализирует это автоматически. –

+0

Это может быть пропущено, когда вы запускаете его во второй раз - V8 использует статистический профилировщик, чтобы решить, что такое горячий код и где пытаться оптимизировать –

2

Просто один цикл в пустом «for» занимает почти нулевое время. Но выход с console.log() нужен кучу больше времени, а также синхронный.

2

Прежде всего, начиная с v0.6, console.log() синхронно (то есть. Он блокирует основной цикл обработки событий.)

Вы пишете вокруг 17MBs в стандартный вывод по каждому запросу. Ответ сервера может занять несколько минут.

Смежные вопросы