类比: node.js 不是js的库或者是框架 jQuery.js/ Angular.js/Vue.js/React.js 是对原本JS的一种封装(减少原始代码的量)or原始代码的封装or数据驱动的应用框架 原本的JS是什么? 涉及到JavaScript?
什么是JavaScript? 计算机语言分两类:编译/解释语言
1.JavaScript是一门编程语言,脚本编程语言 ,是一种解释语言。 会联想到HTML ,即浏览器的内核(js的运行环境) 2.**.js在HTML中工作 3.js的功能就是在网页中实现动态的交互 4.浏览器中的JS可以做什么?domo操作bomo操作(不会,补) 5.不能做什么事情? 对客户端本地文件操作,读取应用程序的mac地址,数据库操作(一般操作就分为两种:文件/网络操作) 6.编程语言能力取决于什么?为什么有些语言能做和不能做(实现一些语言特定的操作)? 取决于其运行环境or平台,api(应用程序编程所需要的接口)。 但是语言本身能力是一样的,不会有歧视。 7.JS只能运行在浏览器中吗? 不是 ,这就涉及到了node.
什么是Node? Node是一个运行环境,类比浏览器
1.是另一个JS的运行环境 2.提供了一种方式,可以让js运行在服务端的方式 在服务端本地运行的两种方式(比较要详细) 3.nodejs价值:可以让做JS开发的同学不用再学任何后端的新知识就可以做web应用程序的后端服务 可以做了一个完整的应用程序。 后端以前用 java/php/asp.net/ 现在也可以用js 4.提供很多功能型模型(API) 5.nodejs 是一个js的应用平台,是web应用程序的服务端 6.应用:node可以用来做动态网站开发,开发客户端程序.
node的特点 1.轻内核, 用其开发应用程序,node本身就提供了一些api,可以让我们读写文件 本身不提供任何功能,需要借助一些模块(模块不是api)
代码解释如下: //console也是node平台提供的一个新对象 console.log('111') //document 是DOM提供的对象//js=ECMAScript+DOM+BOM //Node只和ECMAScript有关系,所以document和console也是dom里的对象 var data = document.getElementById(‘asd’)
if(3>5){ Console.log(‘111’) } //结束
但是node和js的内容还是差别很大的 node可以直接执行一个js文件 语言的能力却决于平台,node是可以进行一些文件操作 提供了一些内置模块(详细,fs,htto,zlib)官方文档,淘宝镜像链接 每个模块都有其作用,(文件类操作模块,网络类操作模块) 还提供一些工具类模块 60多个,常用的十几个 还是有一些具体操作还可以借助第三方提供开发的模块来增加其功能 C++ 可以给他写 基本上nodejs可以实现任何功能
2.自己动手 php请求模型or请求原理 开发尽可能用编辑器少用提示器,从客户端到服务端就是一个输入到输出的一个过程
代码解释如下: //下载一个web服务器软件(Apache) const http = require(‘http’) //安装这个软件 输入|输出 const server =http.createServer((request,response)) =>{ //每一个(任何一个)请求过来都会直接触发的函数 //htttp://localhost:8080/sadsf //htttp://localhost:8080/123 //htttp://localhost:8080/adc 它和php中的地址不一样,以前的一个请求对应一个文件,交互,不只是页面的交互还是客户段和服务端的交互,路由?相当于交警,什么来了要去那里去? //路由的操作 //获取到用户客户端请求的地址,去找IP request事件中找 event :‘request’,多个请求并发,到一个队列中,一个个的执行 //request.url 怎样去找这个过程
console.log(‘request.url’) 可以将请求的地址打印出来 }) }) //打开这个软件 server.listen(8080,(err) => { if(err){ //错误 console.log(‘error’) }else{ console.log(‘server is ready’) }
})
3.社区强大
4.事件驱动
5.单线程 为什呢浏览器在转圈? 多个客户端同时请求涉及到并发 交给apache其中的一个线程(进程是打开的应用程序exe文件)去执行 一个进程包含了多个线程 php是一个请求对于一个线程,多线程,有钱
<?php $id =(int)$_GET['id'] if(是A用户/id==10){ while(true){ echo''111''; } } // /02-php.php echo ''hello world''; b用户可以得到请求 Hello world对比node中: const http = require(‘http’) const server =http.createServer((request,response)) =>{ if(request.url === ‘/1’){ while(true){ } //在此处死磕,所有的都进入到一个队列中去执行 } response.write(‘hello’)//向客户端发送一个请求 response.end() })
server.listen(8080,(err) => { if(err){
console.log('error')}else{ console.log(‘server is ready’) }
})
肯定是多线程效率高为什么node那么方便呢?区别在cpu上 多个线程执行时单核cpu会在多个线程来回切, 单线程会一直执行 cpu在线程中来回的切会有些性能的损耗//以上是只在单核cpu中的讨论