node.js中的console.log / debug / warn / error是否异步?我的意思是JavaScript代码执行停止,直到东西被打印在屏幕上,或者将打印在稍后阶段?
解决方法
更新:从Node 0.6开始,这个帖子已过时,因为stdout现在是同步的。
好吧,让我们看看console.log实际上是什么。
首先它是console module的一部分:
exports.log = function() { process.stdout.write(format.apply(this,arguments) + '\n'); };
所以它只是做一些格式化和写入process.stdout,没有异步到目前为止。
process.stdout是一个getter defined on startup,它被延迟初始化,我添加了一些注释来解释一些事情:
.... code here... process.__defineGetter__('stdout',function() { if (stdout) return stdout; // only initialize it once /// many requires here ... if (binding.isatty(fd)) { // a terminal? great! stdout = new tty.WriteStream(fd); } else if (binding.isstdoutBlocking()) { // a file? stdout = new fs.WriteStream(null,{fd: fd}); } else { stdout = new net.Stream(fd); // a stream? // For example: node foo.js > out.txt stdout.readable = false; } return stdout; });
在TTY和UNIX的情况下,我们结束了here,这个东西继承了套接字。因此,所有的节点基本上是将数据推送到套接字,然后终端照顾其余的。
让我们测试一下吧!
var data = '111111111111111111111111111111111111111111111111111'; for(var i = 0,l = 12; i < l; i++) { data += data; // warning! gets very large,very quick } var start = Date.Now(); console.log(data); console.log('wrote %d bytes in %dms',data.length,Date.Now() - start);
结果
....a lot of ones....1111111111111111 wrote 208896 bytes in 17ms real 0m0.969s user 0m0.068s sys 0m0.012s
终端需要大约1秒来打印出套接字内容,但是节点只需要17毫秒来将数据推送到终端。
流情况也是如此,并且文件大小也得到句柄asynchronous。
所以是的Node.js适用于其非阻塞promise。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。