【发布时间】:2016-06-03 05:13:19
【问题描述】:
学习 Express.js 的最佳资源是什么?谁能解释一下 node.js 框架,它是如何工作的。
非阻塞事件循环概念。
【问题讨论】:
标签: node.js express frameworks web-deployment
学习 Express.js 的最佳资源是什么?谁能解释一下 node.js 框架,它是如何工作的。
非阻塞事件循环概念。
【问题讨论】:
标签: node.js express frameworks web-deployment
我发现 Express 网站解释得很好,而且 Express 对于新用户来说非常容易接近。
多线程系统(例如 Java 和底层 JVM)包含许多执行线程,每个线程可以同时执行自己的代码指令(在多核硬件 CPU 上),或在每个线程运行的位置之间切换一个预定的时间段,然后操作系统安排下一个线程执行。
Node程序在Node环境中执行,是单线程的,所以整个程序只有一个代码执行线程,没有多个线程并发执行。
一个简单的类比是将事件循环与标准编程结构,即while循环进行比较,这正是它的本质。
while(1){
// Node sets this up. Do stuff.. Runs until our program terminates.
}
启动节点程序将启动此循环。你可以想象你的程序被插入到这个循环中。
如果程序中的第一条指令是从磁盘读取文件。该请求将被分派到底层操作系统系统调用以读取文件。
Node 为诸如读取文件之类的事情提供异步和同步功能,尽管通常首选异步,因为在同步调用中,读取文件的问题会在单线程系统中暂停整个程序。
while(1){
require('fs').readFileSync('file.txt');
// stop everything until the OS reports the file has been read
}
在(首选)异步版本中,向操作系统发出读取文件的请求,并指定回调函数,循环继续。程序本质上是在等待操作系统响应,然后在下一个循环(也称为滴答声)上,系统会调用您提供的回调函数(本质上只是内存中的一个位置)并返回结果。
while(1){
// 1st loop does this
require('fs').readFile('file.txt', callback);
// 2nd loop does this, system calls our callback function with the result
callback(err, result)
}
单线程系统具有预期的优势。一是在线程之间没有需要由操作系统完成的上下文切换,这消除了在系统中执行该任务的开销。
另一个,这是一个激烈争论的话题,它与其他系统和编程语言处理它的方式相比如何 - 是使用回调函数作为实现异步的手段进行编程的简单性。
【讨论】:
有很多学习 Express.js 的好资源,例如:
http://shop.oreilly.com/product/0636920032977.do
https://www.udemy.com/all-about-nodejs/
https://www.manning.com/books/express-in-action
https://www.packtpub.com/web-development/mastering-web-application-development-express
https://github.com/azat-co/expressworks
您可能还想查看这些博客:
https://codeforgeek.com/2014/10/express-complete-tutorial-part-1/
【讨论】: