1、判断当前脚本运行在浏览器还是node环境中。
node环境是一个服务器端js的解释器。
看this指向global还是指向window。
前者是node环境,后者是浏览器。即node全局变量是global,浏览器全局变量是window。
typeof window=="undefined"?global:window;
2、node优缺点。
优点:1、高并发
2、无阻塞
3、服务器端语言和客户端都是javascript语言。
缺点:1、不适合cpu密集型应用
2、只支持单核cpu,不能充分应用cpu
3、可靠性低,一旦代码某个环节崩溃,整个系统都会崩溃。
4、更新快,向下不兼容。
3、对前端的理解。
1、贴近用户
2、有了node.js,前端可以实现服务器端的一些事情
前景:1、更优雅兼容的代码,更好的用户体验
4、http状态码。
1xx:服务器接受请求正在处理。
2xx:正常状态码。200:ok
3xx:重定向状态码。
301:永久重定向
302:临时重定向
4xx:客户端错误状态码。
400:语法错误。
401:未经授权访问受密码保护的资源。
403:资源不可用。
404:请求指定位置的资源未找到。
5xx:服务器端错误状态码。500
5、从输入url到显示页面,发生了什么。
DNS域名解析---三次握手,建立TCP连接---浏览器通过get或post向服务器发送请求---服务器返回请求数据---浏览器解析html生成Dom树,解析css,二者构建渲染树,解析js,布局,绘制---浏览器缓存相应的内容,更新缓存---呈现页面
注:
DNS解析:域名(www.tfs.com)——>IP地址(201.234.234.234)
一个域名对应一个IP地址,一个IP地址对应多个域名。
IP地址:分4段,每段十进制范围0-255。
建立tcp连接需要三次握手,断开连接需要四次挥手。
三次握手:1、建立连接时,客户端向服务器发送syn
2、服务器接收到syn后,向客户端发送syn+ack
3、客户端收到syn+ack后,向服务器端发送确认包ack
ack:响应
syn:建立连接
fin:关闭连接
psh:有data数据传输
rst:连接重置
四次挥手:(tcp连接时双全工的,每个方向都必须单独关闭。收到一个fine只意味这一个方向没有数据流动,一个tcp连接在收到一个fine后仍能发送数据。)
1、客户端A向服务器端B发送Fin,用来关闭A到B的连接
2、B收到Fin,向A发送Ack。
3、B关闭与A的连接,并向A发送Fin
4、A向B发送Ack
HTML页面加载和解析流程
1. 用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件;
2. 浏览器开始载入html代码,发现<head>标签内有一个<link>标签引用外部CSS文件;
3. 浏览器又发出CSS文件的请求,服务器返回这个CSS文件;
4. 浏览器继续载入html中<body>部分的代码,并且CSS文件已经拿到手了,可以开始渲染页面了;
5. 浏览器在代码中发现一个<img>标签引用了一张图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码;
6. 服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要回过头来重新渲染这部分代码;
7. 浏览器发现了一个包含一行Javascript代码的<script>标签,赶快运行它;
8. Javascript脚本执行了这条语句,它命令浏览器隐藏掉代码中的某个<div> (style.display=”none”)。突然少了这么一个元素,浏览器不得不重新渲染这部分代码;
9. 终于等到了</html>的到来,浏览器泪流满面……
10. 等等,还没完,用户点了一下界面中的“换肤”按钮,Javascript让浏览器换了一下<link>标签的CSS路径;
11. 浏览器召集了在座的各位<div><span><ul><li>们,“大伙儿收拾收拾行李,咱得重新来过……”,浏览器向服务器请求了新的CSS文件,重新渲染页面。