无法理解node.js
从JS中很少有经验的人,你推荐学习Node.js的什么?
我在论坛上阅读了很多关于事件驱动,非阻塞,异步,回调等的内容,但我不知道那是什么!
我在哪里可以学习基础知识以了解所有术语以及将来的node.js?
谢谢!
你提到的概念(事件驱动的,非阻塞的,异步的,回调)并不特定于JavaScript,并且在更一般的上下文中理解它们是有价值的。 他们都围绕着优雅地处理我们无法控制的资源。
想象一下,等待来自TCP连接的数据,等待操作系统删除文件,或等待用户单击按钮。 如果您按照一步一步的方式对其进行编程(一步一步是同步的 ),则可以继续巡视 - “执行步骤1”,“执行步骤2”,“执行步骤3” - 直到您按下一步“等待发生的事情”。 此时,您的程序将停止并拒绝收到数据,收到删除确认信息或收到按钮单击。 换句话说,通话阻止程序继续。 考虑到有可能需要我们注意的其他TCP连接,文件操作和UI操作,并且不依赖于我们正在等待的项目,这非常低效。
在很多情况下,最好指出我们对资源感兴趣,并在资源发生变化时收到分步说明之外的通知。 从你的概念列表中:
通过使用node.js重命名文件,我们可以看到这些概念:
var fs = require('fs');
// args (current file name, new file name, callback function)
fs.rename('/tmp/hello', '/tmp/world', function (err) {
// this occurs when the rename is complete
if (err) throw err;
console.log('rename complete');
});
console.log('step after rename');
第三个参数可能看起来很奇怪。 这是一个匿名(匿名)函数,将在重命名完成时调用。
请注意,因为fs.rename是异步的,所以不可能告诉我们是否会首先看到“重命名完成”或“重命名后的步骤”消息。 这是事件驱动/异步编程的缺点 - 如果我们有一组复杂的相互依赖的任务,我们需要非常小心地确保依赖任务在依赖它们的任务之前完成。 异步调用完成顺序可能会改变的事实可能会导致非常微妙的错误。
也可以看看:
按照唐纳德的要求编辑:
了解node.js的最好方法是下载,构建,安装和使用它。 你需要:
大多数教程都着重介绍node.js快速构建Http服务器的能力:
请记住,node.js填充了一个非常特殊的利基 - 它旨在构建网络程序。 它可能不适合其他类型的程序。
您需要了解的有关使用Node.js取得进展的基本概念是事件,事件发射器和事件侦听器的概念。
在Node中,你可以调用的大多数函数都是非阻塞的。 例如,当您调用fs.ReadStream()时,它将返回一个ReadableStream对象。 该对象是一个EventEmitter,因此为了对流的内容做任何事情,您需要将一个侦听器附加到该对象上,该对象是在发生特定事件时被调用的函数。
所以像这样的工作:
var fs=require('fs');
var stream = fs.createReadStream("/var/log/messages", { 'flags':'r' });
stream.addListener('data', function(someData) {
console.log(someData);
});
这将读取给定文件中的所有文本,并将其写入控制台。 当有数据要从流中读取时,函数会被调用,并从文件中传递数据。
有趣的是,一旦没有更多数据要从文件中读取,脚本就会退出。 只要有一个有效的事件侦听器连接到发射器,或者另一个异步回调(如定时器)处于活动状态,节点只会保持运行状态。
«Javascript:The Good Parts»是有史以来学习语言的来龙去脉的最好的书籍之一,而不仅仅是DOM的东西。
链接地址: http://www.djcxy.com/p/52647.html