网络&浏览器

12 篇文章 0 订阅
5 篇文章 0 订阅
1. OSI七层模型?作用?

OSI七层模型通过七个层次化的结构模型使不同的系统不同网络之间实现可靠通讯,其主要功能就是帮助不同类型主机实现数据传输。
物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
数据链路层:通过各种控制协议,将有差错的物理信道变成无差错的、能可靠传输数据帧的数据链路。
网络层: 通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。 数据链路层的数据在这层被转换为数据包,然后通过路径选择、分段组合、顺序、进出路由等控制,将信息从一个网络设备传送到另一个网络设备。
传输层: 向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
会话层 : 组织和协调两个会话进程之间的通信,并对数据交换进行处理。
表示层: 处理用户信息的表示问题,如编码、数据格式转换和加密解密。
应用层: 是计算机用户以及各种应用程序和网络之间的接口,它直接向用户提供服务,完成用户希望在网络上完成的各种工作。


一个设备工作在哪层,关键看它工作的时候用的哪一层的数据头部信息。
物理层: 网卡,网线,集线器,中继器,调制解调器
数据链路层: 网桥,交换机
网络层: 路由器
传输层及以上: 网关

交换机与路由器?

都可以过滤网络流量。
交换机是一种基于MAC地址识别,能完成封装转发数据包功能的网络设备。路由器使用专门的软件协议从逻辑上对整个网络进行划分。
主要的区别:

  1. 工作层次不同,前者在数据链路层,后者在网络层。
  2. 数据转发依据的对象不同,前者依靠物理地址或MAC地址,后者依靠IP地址
  3. 路由器可以分割广播域,广播数据不会穿过路由器,交换机不行
  4. 路由器提供了防火墙服务,对于不支持路由协议和未知目标网络的数据包都不传送。

更多细节请戳OSI七层模型详解

2. DNS的解析过程?

首先了解三个概念(以www.163.com为例):

  1. 根域名服务器 : 其实是".",返回顶级域名服务器(这里是com.域)的IP地址,全世界有13个根域名服务器的IP地址,而不是13台机器。
  2. 顶级域名服务器: 返回权威域名服务器的IP地址(这里是163.com
  3. 权威域名服务器:返回对应主机的IP地址。

具体解析过程(这里的数字与图中的数字不对应):
(1).浏览器在访问一个域名(www.163.com)之前,会先问本地DNS服务器,如果本地DNS服务器拿到这个请求后,会先在缓存中检查有没有对应的IP地址,有就返回,这个时候拿到的地址会被标记为非权威服务器的应答
(2).如果本地缓存中没有的话,就会从配置文件中读取13个根域名服务器的地址,然后向其中一台发起请求
(3).根域名服务器收到请求,发现是com.,然后返回它的顶级域名服务器的地址
(4).顶级域名服务器收到请求,作为一级域名,它负责管理二级域名,返回163.com对应的权威域名服务器的地址。
(5).权威域名服务器收到请求,找到www.163.com对应的IP地址,返回给本地DNS服务器
(6).本地DNS收到应答,将它返回给客户端,并将其保存在缓存中。

DNS解析过程

3.TCP三次握手?

1.客户端发送一个携带SYN标志的包,请求建立连接
2.服务器端返回一个携带SYN和ACK标志的包,同意建立连接
3.客户端返回一个携带ACK标志的包,确认建立连接,开始传输数据
具体见网络协议TCP

4.TCP四次挥手?

因为双方都需要发送断开连接的请求和同意断开连接的应答
TCP四次挥手图

5.TCP和UDP的区别?

见这里

6.HTTP协议

HTTP协议是超文本传输协议的缩写,是用于从万维网服务器传输超文本到本地服务器的传送协议,基于TCP/IP通信协议传递数据。

  1. 简单快速:客户向服务器请求服务时,只需要传送请求方法和路径。
  2. 灵活: 它允许传输任意类型的数据对象,由Content-Type加以标记。
  3. 持久连接:HTTP1.1中提出了持久连接,只要通信两端的任意一端没有明确提出断开,就保持连接状态,以便下一次通信复用该连接,避免重复建立和断开所造成的开销。
  4. 管道化:客户端能同时发送多个请求,服务器再按顺序一个接一个响应。
  5. 状态管理: HTTP是无状态协议,请求和响应一一对应,不会出现两个请求复用一个响应的情况。
  6. 支持B/S及C/S模式。
7.HTTP请求报文?

请求报文的格式就像这样:
HTTP请求报文格式
请求行

  • 请求方法(GET类型、POST类型、PUT类型、DELETE类型)
  • 请求URL
  • HTTP协议及版本

请求头

  • 保存了很重要的字段信息(键值对形式),比如Accept-Charset(表示客户端可以接受的字符集),Content-Type(正文的格式)等等

请求实体

  • 将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。请求URL也可以通过类似于这种形式传递参数值。
HTTP响应报文?

HTTP响应报文格式如下
HTTP响应报文格式
响应行(状态行)

  • 报文协议及版本
  • 状态码
  • 原因描述

响应头

  • 说明很重要的一些附加信息,如Content-Type(表示返回的正文格式),Retry-After(告诉客户端应该在多长时间以后再次尝试)等等

响应体

  • 返回给客户端的信息
8.HTTP中的Keep-Alive

我们知道HTTP协议采用“请求-应答”模式,当采用普通模式时,每个请求/应答,客户端和服务器之间都要建立一个连接,完成之后再断开,这样当一个页面对一个地址由多次请求时,就会反复地进行建立断开连接,因此出现了Keep-Alive模式,使客户端到服务器端的连接持久有效。
HTTP1.1中默认启用Keep-Alive。
优点:更加高效,避免了连接建立和断开的开销。
缺点:长时间的连接容易导致系统资源无效占用,浪费系统资源,所以要合理配置timeout参数

当保持长连接时,如何判断服务器的数据已经发生完成?

当连接处于普通模式时,服务器通常在发送回所请求的数据之后就关闭连接。这样客户端读数据时会返回EOF(-1),就知道数据已经接收完全了。
但是再处于Keep-Alive模式时,可以通过以下两个首部字段来判断:
Content-Length:表示实体内容长度。主要应用于静态资源,服务器能明确知道返回内容的长度。
Transfer-Encoding: 指传输编码。当资源是动态资源时,可以通过指定Transfer-Encoding: chunked来告知浏览器当前的编码是将数据分成一块一块传递的。最后,当浏览器接收到一个长度为0的chunked时, 知道当前请求内容已全部接收。

9.HTTPS的工作模式

我们知道,非对称加密的性能不如对称加密,那有一种可以将两者结合起来的方法,例如公钥私钥主要用于传输对称加密的密钥,而真正的大量数据是通过对称加密传输的。 这就是HTTPS协议的主要思路。
HTTPS单向认证
HTTPS单向认证(客户端认证服务端)流程:
1.客户端发送Client Hello消息、明文形式的加密套路等等信息、一个随机数(用于后面协商对称密钥)到服务器
2.服务器返回Server Hello消息、加密套路、随机数到客户端
3.服务器发送自己的证书,然后表示发送完了
4.客户端拿到证书,用自己的CA仓库(寻找授信的CA的过程是不断往上追溯的)里面的公钥去解密,成功即可信。
5.客户端产生随机数字Pre-master,并用服务器端的公钥加密,然后和Client Key Exchange一起发送给服务器。
6.服务器用私钥解密。(这个时候,服务器端和客户端都有了三个随机数:自己的随机数、对端的随机数、Pre-master,双方根据这个计算出对称密钥)
7.最后双方用以前传递过的参数进行对称加密传输,验证成功,开始通信。

HTTPS 协议比较复杂,沟通过程太繁复,这样会导致效率问题,有哪些优化方法?

(1). CDN接入
HTTPS增加的延时主要是传输延时RTT,RTT的特点是节点越近延时越少,CDN天然离用户最近,因此选择CDN作为HTTPS的接入口,能极大减少延时。
(2). 会话缓存
利用会话缓存从而复用连接,基于会话缓存建立的HTTPS连接不需要服务器使用私钥解密获取Pre-master信息,可以省掉CPU的消耗。
(3). 硬件加速
为接入服务器安装专用的SSL硬件加速卡。
(4). 远程解密
本地接入消耗过多的CPU资源,考虑将最消耗CPU资源的RSA解密计算任务转移到其他服务器。
(5). SPDY/HTTP2
这个是通过修改协议本身,利用TLS/SSL带来的优势,来提升HTTPS的性能。


10.HTTP协议中的长短连接和长短轮询?

首先我们看一下这个问题,由于HTTP协议本质上就是基于请求/响应模式的,因此只要是服务器端做出响应了,本次HTTP连接就结束了。这里所说的长短连接其实是TCP连接,HTTP协议说到底是应用层的协议,TCP才是传输层的协议。
短连接:就是请求发起,连接建立,数据传输,连接关闭,用来传输一些实时数据,传输结束就关闭连接。
长连接:服务器和客户端都设置保持连接的参数,通道一直连接,便于多个HTTP请求复用这同一个TCP长连接。
短轮询:在某个循环中不断地发起请求,每一次请求都会立即得到返回结果。
长轮询:发起请求,服务器端若数据无变化,则挂起连接,直到数据变化,服务器返回这个结果,客户端才进入下一个请求周期。(这两种在客户端来说,动作都是一样的,就是不停地去请求)
长短轮询和长短连接的区别
(1). 决定的方式,一个TCP连接是否是长连接是通过服务器端和客户端双方设置HTTP的Connection Header决定的;而轮询方式是根据服务器端的处理方式来决定的,跟客户端无关。
(2). 实现的方式,连接的长短是通过协议来规定和实现的;轮询的长短是服务器通过编程方式手动挂起请求来实现的。

11. HTTP为什么不安全?

(1). 明文传输数据,有被窃听的风险
(2). 接收到的报文不能确定是发送时的报文,因为有被篡改的风险
(3). 不验证通信两端的身份,请求或响应有被伪造的风险

12. HTTPS的主要作用?

其实为了解决上一个的缺陷,HTTPS在HTTP接触上加入了SSL协议,它依靠证书验证服务器的身份,并为浏览器和服务器之间的通信加密,因此HTTPS主要作用有两点:
(1). 为数据的安全传输建立一个信息安全通道
(2). 确认网站的真实性

13.HTTPS与HTTP的主要区别
  1. HTTPS协议需要用到CA证书,一般免费证书较少,因而需要一定的费用
  2. HTTP时超文本传输协议,信息明文传输;HTTPS则是具有安全性的SSL加密传输协议
  3. HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
  4. HTTP连接很简单,是无状态的;HTTPS是由HTTP和SSL构建的可进行加密传输、身份认证的网络协议
14. HTTPS的缺点

虽然说HTTPS有很大的优势,但其相对来说还是存在不足的

  1. 通信两端都需要进行加密和解密,会消耗大量的CPU、内存等资源,增加了服务器的负载
  2. 加密运算和多次握手降低了访问速度
  3. 在开发阶段,加大了页面调试难度。由于信息都被加密了,所以用代理工具的话,需要先解密然后才能看到真实信息
  4. 用HTTPS访问的页面,页面内的外部资源都得用HTTPS请求,包括脚本中的AJAX请求
15.HTTPS的单向认证和双向认证

单向认证
(1). 客户端保存着服务器端的证书并信任该证书即可
(2). HTTPS一般是单向认证,这样可以让绝大部分人都访问你的站点
双向认证
(1). 先决条件是有两个或两个以上的证书,一个是服务器端证书,另一个或多个是客户端证书
(2). 服务器端保存着客户端的证书并信任该证书,客户端保存着服务器端的证书并信任该证书。这样,成功的情况下即可完成请求响应
(3). 双向认证一般企业应用对接

16.HTTP/1.1 的不足

(1). 在传输中会出现队首阻塞问题
(2). 响应部分轻重缓急,只按先来后到的顺序执行
(3). 并行通信需要建立多个TCP连接
(4). 服务器只能被动等待客户端发起请求
(5). 由于HTTP是无状态的,每次请求和响应都会携带大量冗余信息

17.HTTP2.0 的新特性
  1. 增加二进制分帧:在应用层和传输层之间加了一个二进制分帧,改变了之前版本的文本传输格式,现在是对数据进行二进制编码,形成一个个帧,然后送到数据流中,对方接收帧(来自不同的流可以通过帧头的标志来关联和组装起来)并拼接成一条消息,再进行处理
  2. 多路复用: 一个连接同一时刻可以被多个流使用。
    多路复用主要是解决1.1版本中的两个问题:
    (1). 串行的文本传输。在1.1中,我们传输的request和response都是基于文本的,这样会引发一个问题,所有的数据都必须按序传输,因为接收端不知道这些数据的顺序。但是2.0引入数据帧的概念,帧对数据进行顺序标识,这样接收端收到数据后可以根据标识对数据进行合并,因为有了顺序标识,服务器可以进行并行传输数据,这就是所做的事情。
    (2). 连接数过多。 2.0对同一域名的所有请求都是基于流,也就是说同一域名不管访问多少文件,也只建立一路连接。
  3. 首部压缩: 首部信息会被封装到Headers帧,在客户端和服务器使用首部表来跟踪和存储之间发送的键值对,对相同请求不需要再次发送请求和响应请求,通信期间对于几乎不会改变的通用键值(如user-agent)只发送一次,相当于做一层缓存。
  4. 服务器推送: 服务器为单个客户端请求发送多个响应,除了对原始请求的响应之外,服务器还可以向客户端推送额外的客户端想要的资源。
18.WebSocket和HTTP的区别?
  1. HTTP:客户端与服务器通信,必须有客户端发起请求,然后服务器端返回结果,客户端是主动的,服务器端是被动的
  2. WebSocket:是为了解决客户端发起多个HTTP请求到服务器,浏览器必须经历长时间的轮询问题而生的,它实现了多路复用,是全双工通信。在这个协议下,客户端和服务器可以同时发送消息
19.HTTP状态码

访问一个网页时,浏览器向网页的服务器发出请求,服务器会返回一个包含HTTP状态码的信息头来响应浏览器的需求。
常见的HTTP状态码:
200-请求成功
301-永久重定向
404-无法找到资源
500-服务器在执行时发生错误,无法完成请求
HTTP状态码
301状态码和302状态码的区别? ↑ 中有。
304状态码?
304状态码是对客户端有缓存情况下服务器端的一种响应。
客户端第一次请求资源时,服务器端会添加一个 Last Modified响应头,这里说明资源的最后修改时间,客户端把资源和时间都缓存下来,
在第二次请求时,发现缓存里面有 Last Modified,就会在请求中包含If Modified Since,这个时间就是缓存资源的 Last Modified,服务器对这个时间和当前请求资源的最后修改比对,就知道返回304还是200。
206状态码?
这种响应是在客户端表明自己只需要目标URL上的部分资源的时候返回的,这种情况经常发生在继续请求一个未完成的下载的时候(通常是当客户端加载一个体积较大的嵌入文件),这就需要设置一些消息头来进行控制。

20.断点续传?

要实现断点续传的功能,通常都要客户端记录下当前的下载进度,并在需要续传的时候告诉服务器自己需要的内容范围。
HTTP1.1协议中定义了断点续传相关的HTTP头RangeContent-Range字段,一个最简单的断点续传实现大概如下:
(1). 客户端下载一个1024K的文件,已经下载了512K
(2). 网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:Range:bytes=512000- 这个头告诉服务器从文件的512K位置开始传输
(3). 服务器端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:Content-Range:bytes 512000-/1024000 此时服务器返回状态码206
但是如果请求的资源发生变化,如何解决?
这个时候我们就需要有一个标识文件的唯一性的方法,比如实现Last-Modified来标识文件的最后修改时间,这样就可以知道续传时文件是否发生变化,同时把上次请求时服务器返回的ETag响应头作为本次请求的If-Match 请求头发出去,如果服务器发现版本匹配不一致,就会返回HTTP/412 Precondition Failed响应;
如果客户端使用If-Range(可以是ETag头或者是Last-Modfied中的最后修改时候)而不是If-Match发送上次收到的ETag头,服务器收到请求,通过If-Range的内容进行校验,一致就返回206的续传回应,不一致就返回200,回应新文件的全部数据。

21.readyState的5种状态含义?

在使用原生AJAX代码时,我们经常会写出下面的回调:

xhr.onreadystatechange = () => {
      if(xhr.readyState === 4 && xhr.status === 200) {
        document.write(xhr.responseText);
      }
    };

这里的readystate是什么呢?
readystate是指运行AJAX所经历的几种状态:
0(UNSENT):初始化,XMLHttpRequest 对象还没有完成初始化(还没有调用send()方法)
1(OPENED):载入,XMLHttpRequest 对象开始发送请求(已调用send()方法,正在发送请求)
2(HEADERS_RECEIVED):载入完成,XMLHttpRequest对象的请求发送完成(send()方法执行完成,可以接收到全部响应内容)
3(LOADING):解析,XMLHttpRequest对象开始读取服务器的响应(正在解析响应内容)
4(DONE):数据传输已经完成或传输过程中出现问题(响应内容解析完成,可以在客户端调用)

var getXmlHttpRequest = function () {
    try{
        //主流浏览器提供了XMLHttpRequest对象
        return new XMLHttpRequest();
    }catch(e){
        //低版本的IE浏览器没有提供XMLHttpRequest对象,IE6以下
        //所以必须使用IE浏览器的特定实现ActiveXObject
        return new ActiveXObject("Microsoft.XMLHTTP");
    }
};
var xhr = getXmlHttpRequest();
// readyState 0=>初始化 1=>载入 2=>载入完成 3=>解析 4=>完成
// console.log(xhr.readyState);  0
xhr.open("TYPE", "URL", true);
// console.log(xhr.readyState);  1
xhr.send();
// console.log(xhr.readyState);  1
xhr.onreadystatechange = function () {
    // console.log(xhr.status); //HTTP状态吗
    // console.log(xhr.readyState);  2 3 4
    if(xhr.readyState === 4 && xhr.status === 200){
        alert(xhr.responseText);
    }
};
22.浏览器内核?

主要分成两部分:渲染引擎(layout engineer或 Rendering Engine) 和JS引擎。
渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后输出至显示器或打印机。浏览器内核的不同对于网页的语法解释会有不同,所以渲染的效果也不同。所有网页浏览器、电子邮件客户端以及其他需要编辑、显示网络内容的应用程序都需要内核。
JS引擎:解析和执行JavaScript来实现网页的动态效果。
最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。


常见的浏览器内核有哪些?
Trident内核:IE,360,搜狗浏览器;
Webkit内核:Safari,Chrome,
Gecko内核:Netscape6及以上版本,
Presto内核:Opera
Blink内核:Opera;

23. 垃圾回收机制和内存管理?

垃圾回收机制(GC:Garbage Collection):会周期性找出不再使用的变量,然后释放掉内存。因为其开销比较大,所以会按照固定的时间间隔周期性执行。
垃圾回收策略:
标记清除: 当变量进入环境时,将变量标记为进入环境,当从window节点遍历DOM树不能遍历到某个对象时,会被标记为离开环境,在下一个周期被清除。
引用计数:就是跟踪记录每个定义的对象被引用的次数,当这个次数为0时,就会被视为准备回收的对象。
手动释放


内存管理

  1. 什么时候触发垃圾回收?
    它周期性运行,如果分配的内存非常多,那么回收工作也会很艰巨,那么确认垃圾回收时间间隔就很重要。 在IE7中,垃圾回收机制会根据内存分配量和程序占用内存比例进行调整开展工作。
  2. GC的缺陷:停止响应其他操作
  3. GC优化策略:分代回收;增量GC;

开发过程中遇到内存泄漏情况,怎么解决?
内存泄漏指一块被分配的内存既不能使用,也不能回收,直到浏览器进程结束。
几种情况:
(1). 当页面中元素被移除或替换时,若元素绑定的事件仍没被移除,在IE中不会做出恰当处理,此时要先手工移除事件,不然会存在内存泄漏。
(2). 闭包可以维持函数内部变量,使其得不到释放,此时外部的执行上下文在结尾可以对该变量置空释放。

24. 域名发散和域名收敛

域名发散
PC时代为了突破浏览器的域名并发限制,遵循这样的定律HTTP静态资源采用多个子域名,这样做的目的是充分利用现代浏览器的多线程并发下载能力。
由于浏览器的限制,每个浏览器对于每个域名的连接数一般是有上限的,所以PC端对静态资源优化时,通常将静态资源分布在几个不同域,保证资源最完美地分域存储,提供最大并发,让客户端加载资源更迅速。
那么,为什么浏览器要做并发限制呢?
(1). 在以前,服务器的负载能力差,稍微流量大一点服务器就容易崩,所以浏览器要对最大并发数进行限制,如果不限制的话,服务器的负载能力会下降。
(2). 防止分布式拒绝服务攻击distributed denial-of-service attack,简称DDoS攻击)。最基本的 DoS 攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。

当然,由于建立新的请求需要一定的代价,因此需要在域名发散和域名收敛之间做权衡,通常发散的域名个数为2-4个。

域名收敛
域名收敛是将静态资源只放在一个域名下面,而非发散情况下的多个域名下。域名发散可以突破浏览器的域名并发限制,那么为什么要反其道而行之呢?
因为域名发散是PC时代的产物,而现在进入移动互联网时代,通过无线设备访问网站,APP的用户已占据了很大一部分比例,而域名发散正是在这种情况下提出的。 在移动端HTTP请求过程中第一步DNS解析占据了大部分时间,在增加域名的同时,往往会给浏览器带来解析的开销。

25.什么是Service Worker?

Service Worker是独立于当前页面的一段运行在浏览器后台进程中的脚本。

大家知道,浏览器一般有三类web worker,前两种dedicated worker 和 shared worker 专注于解决“耗时的JS执行影响UI响应”的问题,而Service Worker则是为解决“web app的用户体验不如native app”的普遍问题而提供的一系列技术集合,必然部分处理逻辑会牵扯到UI线程,从而在启动Service Worker的时候,UI线程的繁忙也会影响其启动性能。

Service Worker不需要用户打开web页面,也不需要其他交互,异步地运行在一个完全独立的上下文环境,不会对主线程造成阻塞。
官方入门文档中提到,它能提供丰富的离线体验周期的后台同步消息推送通知拦截和处理网络请求管理资源缓存,这些个能力都有什么作用呢?
(1). 丰富的离线体验:一提到Service Worker,很多人都会想到离线访问,但实际情况来说,需要离线访问的场景很少,毕竟web最大的特点在于可传播性嘛,所以Service Worker的离线体验主要还是在于解决页面加载的可靠性,让用户能够完整地打开整个页面,比如页面的白屏时间过长,网络不稳定造成的加载中断导致页面不可用。有实际意义的离线是指在网络良好的情况下,在用户想要访问之前,提前把资源加载好。
(2). 消息推送通知:Service worker 的消息推送,其实是提供了一种服务器与页面交互的技术。消息能推送到页面说明页面提前知道要发生的一些事情。从 API 的使用规范来看,消息推送与通知弹窗的关联比较密切,基本上使用的业务场景仅限制在消息通知范围。
(3). 管理资源缓存:Service worker Cache API 的出现彻底改变了浏览器其他的存储API(application cache、localStorage)给与网页端控制权太少、限制太多、网页端不能完全控制每一个资源请求的存储逻辑,赋予了网页端强大的灵活性,更大的存储空间。
(4). 网络请求:在 Fetch 出现之前,页面 JS 一般通过 XHR 发起网络资源请求,但 XHR 有一定的局限性,比如,它不像普通请求那样支持 Request 和 Response 对象,也不支持 streaming response,一些跨域的场景也限制较多。而现在,Fetch API 支持 以上这些,Foreign Fetch 还具备跨域的能力。
基本架构使用步骤(Service Worker概念和应用介绍https://blog.csdn.net/c_kite/article/details/86493178)

  1. service worker URL通过serviceWorkerContainer.register()来获取和注册。
  2. 如果注册成功,service worker就在ServiceWorkerGlobalScope环境中运行;这是一个特殊类型的worker上下文运行环境,与主运行线程相独立,同时也没有访问DOM的能力。
  3. service worker现在可以处理事件了。
  4. 受service worker控制的页面打开后会尝试去安装service worker。最先发送给service worker的事件是安装事件(在这个事件里可以开始进行填充IndexDB和缓存站点资源)。这个流程同原生App或者Firefox OS App是一样的——让所有资源可离线访问。
  5. oninstall事件的处理程序执行完毕后,可以认为service worker安装完成了。
  6. 下一步是激活。当service worker安装完成后,会接收到一个激活事件(active event)。onactivate主要用途是清理先前版本的service worker脚本中使用的资源。
  7. service worker现在可以控制页面了,但仅是在register成功后的打开的页面。也就是说,页面起始于有没有service worker,且在页面的接下来生命周期内维持这个状态。所以,页面不得不重新加载以让service worker获得完全的控制。
    server worker lifecircle
    支持事件:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值