对于没有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填补了一个非常特殊的领域-它旨在构建网络程序。对于其他类型的程序,它可能不是正确的工具。