http1.1中,增加了connection:keep-alive,一次TCP连接可以发送多次请求,但服务端只能顺序处理请求,
如果要实现并发请求,需要开启多个TCP连接,但浏览器的TCP连接数有最大限制,Chrome是6个。
http2的特性:多路复用(一次TCP连接中可以实现多个并发请求);首部压缩;服务端推送(一次请求多次响应,减少了请求数);
http协议最大的问题在于时延(而非带宽),多路复用技术极大降低了时延
线程是进程的子集;进程是线程的容器;一个程序就是一个进程;一个进程至少一个线程。
原理:
1)进程是OS分配的一个环境容器,线程是OS分配CUP时间片去执行的一项任务,从这个意义来看线程是动态的。
2)程序是指令、数据和组织形式等的描述,进程是程序的实体,是资源分配的最小单位;
线程是OS运算调度的最小单位,一个进程可以并发进行多个线程,每个线程执行自己的任务;
区别:
多个线程共享同一进程的地址空间和资源,不同进程之间的地址空间和资源时相互独立的。
1个线程崩溃会导致所在进程崩溃,但1个进程崩溃并不会导致其他进程崩溃
多线程的优点:
1)提高程序执行效率
2)充分利用CPU和内存资源(1个CPU本质上只能处理1个线程)
3)线程在执行完之后会自动销毁
history模式:
调用了H5的window.history API实现的, API包括pushState() popState() forward() back() go()等
在创建VueRouter的时候,会监听地址栏的变化并作出相应的操作,比如下载文件或改变dom
hash模式:
在主地址后面加上#具体地址,这是通过改变window.location.hash来实现的, 通过window监听hashChange事件,
如果发生改变,可以修改location.hash来改变路由并执行相应处理。每次hash的改变都会放到历史栈里面。
共同点:为什么能实现局部刷新?
通过pushState或者赋值location.hash的方式不会重新发送请求给服务器,这为页面视图局部刷新提供了基础。
同时,会将URL存入历史记录栈中。
history的优点:
1)美观好看;
2)pushState设置的新URL可以是与当前URL同源的任意URL;而hash只可修改#后面的部分,故只可设置与当前同文档的URL
3)pushState设置的新URL可以与当前URL一模一样,这样也会把记录添加到栈中;而hash设置的新值必须与原来不一样才会触发记录添加到栈中
history的问题:
用户输入一个地址首次进入,如果地址不是index.html那么就会存在服务器找不到/404的错误。
而在hash模式下则不会出现这种问题,因为#以及后面的地址不会发送给服务器,只会匹配前面的主地址。
解决方法:在服务端的路由配置上,最后统一匹配到index.html路径上。