简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
/* * V8是Google Chrome浏览器内置的JavaScript脚本引擎。 Google Chrome使用V8的API,但引擎的内核部分是独立于浏览器之外的。 V8引擎编译和执行JavaScript源代码。 速度是V8追求的主要设计目标之一,它把JavaScript代码直接编译成机器码运行, 比起传统的“中间代码+解释器”的引擎,优势不言而喻。 V8的团队说Chrome对脚本的解析和执行速度是Firefox和Safari的10倍,是IE的56倍。 * */ 什么是web容器? 我们以其他服务器为例,安装好其他服务器后, 我们在可以找到其他的一个根目录,往这个根目录放入静态文件, 如图片、xxx.html,可以找浏览器上访问得到,这个目录我们可以称为web容器。 nodejs 是没有web容器,不像php与nginx结合可直接访问静态文件; nodejs每一次访问都要做顶层路由设计(图片、css等都要做路由设计, 后面学习框架,如express,它已经帮我们做了很多路由设计, 不用自己每访问一个静态资源、或路由都自己去实现)。用nodejs做一个静态资源服务器 ,要做一堆的路由设计,在nodejs中如果看到一个路由是/yuan; 就不要想着其一定有一个对应的yuan物理文件夹; url和真实物理文件夹是没有关系的,而是通过nodejs路由设计关联起来的。 /*单线程*/ 单线程在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好, 后面的才会执行。单线程处理的优点:同步应用程序的开发比较容易, 但由于需要在上一个任务完成后才能开始新 的任务,所以其效率通常比多线程应用程序低。 如果完成同步任务所用的时间比预计时间长, 应用程序可能会不响应。多线程处理可以同时运行多个过程。 /*阻塞I/O 首先,要从你常用的IO操作谈起,比如read和write,通常IO操作都是阻塞I/O的, 也就是说当你调用read时,如果没有数据收到,那么线程或者进程就会被挂起, 直到收到数据。阻塞的意思,就是一直等着。阻塞I/O就是等着数据过来, 进行读写操作。应用的函数进行调用,但是内核一直没有返回,就一直等着。 应用的函数长时间处于等待结果的状态,我们就称为阻塞I/O。 每个应用都得等着,每个应用都在等着,浪费啊!很像现实中的情况。大家都不干活, 等着数据过来,过来工作一下,没有的话继续等着。*/ /*非阻塞I/O 相当于你去查看有没有数据,告诉你没有,过一会再来吧!应用过一会再来问, 有没有数据?没有数据,会有一个返回 * */ /*事件驱动 * 在基于线程的方式中(thread-based way)你到了柜台前,把你的点餐单给收银员或者给收银 * 员直接点餐,然后等在那直到你要的食物准备好给你。收银员不能接待下一个人, * 除非你拿到食物离开。想接待更多的客户,容易!加更多的收银员! 当然,我们知道快餐店其实不是这样工作的。他们其实就是基于事件驱动方式,这样收银员更高效。 只要你把点餐单给收银员,某个人已经开始准备你的食物,而同时收银员在进行收款,当你付完钱, 你就站在一边而收银员已经开始接待下一个客户。在一些餐馆,甚至会给你一个号码, 如果你的食物准备好了,就呼叫你的号码让你去柜台取。关键的一点是,你没有阻塞下一个客户 的订餐请求。你订餐的食物做好的事件会导致某个人做某个动作(某个服务员喊你的订单号码, 你听到你的号码被喊到去取食物),在编程领域,我们称这个为回调(callback function)。 * */ //在计算机网络中,localhost(意为“本地主机”,指“这台计算机”) // 是给回路网络接口(loopback)的一个标准主机名,相对应的IP地址为127.0.0.1 /* cd cd 目录名:进入特定的目录。如果看到有个目录显示为:abcdef 就 输入:cd abcdef进入该目录。 cd\ 退回到根目录。 cd..退回到上一级目录。 */