http2,进程线程,vue-router模式

1. http2和http1.1对比?

http1.1中,增加了connection:keep-alive,一次TCP连接可以发送多次请求,但服务端只能顺序处理请求,
如果要实现并发请求,需要开启多个TCP连接,但浏览器的TCP连接数有最大限制,Chrome是6个。

http2的特性:多路复用(一次TCP连接中可以实现多个并发请求);首部压缩;服务端推送(一次请求多次响应,减少了请求数);

http协议最大的问题在于时延(而非带宽),多路复用技术极大降低了时延

2. 进程和线程的关系?

线程是进程的子集;进程是线程的容器;一个程序就是一个进程;一个进程至少一个线程。

原理:

1)进程是OS分配的一个环境容器,线程是OS分配CUP时间片去执行的一项任务,从这个意义来看线程是动态的。
2)程序是指令、数据和组织形式等的描述,进程是程序的实体,是资源分配的最小单位;
线程是OS运算调度的最小单位,一个进程可以并发进行多个线程,每个线程执行自己的任务;

区别:

多个线程共享同一进程的地址空间和资源,不同进程之间的地址空间和资源时相互独立的。
1个线程崩溃会导致所在进程崩溃,但1个进程崩溃并不会导致其他进程崩溃

多线程的优点:

1)提高程序执行效率
2)充分利用CPU和内存资源(1个CPU本质上只能处理1个线程)
3)线程在执行完之后会自动销毁

3. vue-router的两种路由模式区别和如何实现?

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路径上。
链表
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。