高中课程免费教学网站,wordpress移动底部导航菜单,qq群引流推广网站,做网站jsp好还是文章目录1. 线程与进程1.1 进程:1.2. 线程:1.3. 关系2. 浏览器内核模块组成4. 事件循环机制5. 缓存5.1. 缓存理解5.2. 缓存分类5.3. 缓存使用示意图5.4. 缓存中的header参数1. 线程与进程
1.1 进程:
进程是计算机中的程序关于某数据集合上的一次运行活动#xff0c;是系统进…
文章目录1. 线程与进程1.1 进程:1.2. 线程:1.3. 关系2. 浏览器内核模块组成4. 事件循环机制5. 缓存5.1. 缓存理解5.2. 缓存分类5.3. 缓存使用示意图5.4. 缓存中的header参数1. 线程与进程
1.1 进程:
进程是计算机中的程序关于某数据集合上的一次运行活动是系统进行资源分配和调度的基本单位是操作系统结构的基础。
1.2. 线程:
线程是操作系统能够进行运算调度的最小单位被包含在进程之中是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流一个进程中可以并发多个线程每条线程并行执行不同的任务。
1.3. 关系 每个进程都有相应的线程在执行程序时实际上是执行相应的一系列线程。进程是资源分配的最小单位线程是程序执行的最小单位。 2. 浏览器内核模块组成 4. 事件循环机制 模型的运转流程
执行初始化代码, 将事件回调函数交给对应模块管理 当事件发生时, 管理模块会将回调函数及其数据添加到回调列队中 只有当初始化代码执行完后(可能要一定时间), 才会遍历读取回调队列中的回调函数执行
5. 缓存 5.1. 缓存理解
缓存定义:浏览器在本地磁盘上将用户之前请求的数据存储起来当访问者再次需要改数据的时候无需再次发送请求直接从浏览器本地获取数据缓存的好处:减少请求的个数节省带宽避免浪费不必要的网络资源减轻服务器压力提高浏览器网页的加载速度提高用户体验
var dt new Date();
dt.setSeconds(dt.getSeconds() 60);
document.cookie cookietest1; expires dt.toGMTString();
var cookiesEnabled document.cookie.indexOf(cookietest) ! -1;
//是否启用cookie
if(!cookiesEnabled){alert(没有启用cookie );
}else{alert(已经启用cookie );
}5.2. 缓存分类
强缓存不会向服务器发送请求直接从本地缓存中获取数据请求资源的的状态码为: 200 ok(from memory cache)协商缓存向服务器发送请求服务器会根据请求头的资源判断是否命中协商缓存如果命中则返回304状态码通知浏览器从缓存中读取资源强缓存 协商缓存的共同点都是从浏览器端读取资源强缓存 VS 协商缓存的不同点 强缓存不发请求给服务器协商缓存发请求给服务器根据服务器返回的信息决定是否使用缓存
5.3. 缓存使用示意图 5.4. 缓存中的header参数 强缓存的header参数
expires这是http1.0时的规范它的值为一个绝对时间的GMT格式的时间字符串如Mon, 10 Jun 2015 21:31:12 GMT如果发送请求的时间在expires之前那么本地缓存始终有效否则就会发送请求到服务器来获取资源cache-controlmax-agenumber这是http1.1时出现的header信息主要是利用该字段的max-age值来进行判断它是一个相对值资源第一次的请求时间和Cache-Control设定的有效期计算出一个资源过期时间再拿这个过期时间跟当前的请求时间比较如果请求时间在过期时间之前就能命中缓存否则就不行cache-control常用的值做一个简单了解即可no-cache: 不使用本地缓存需要使用协商缓存。先与服务器确认返回的响应是否被更改如果之前的响应中存在Etag那么请求的额时候会与服务器端进行验证如果资源为被更改则使用缓存。no-store: 直接禁止游览器缓存数据每次用户请求该资源都会向服务器发送一个请求每次都会下载完整的资源。public可以被所有的用户缓存包括终端用户和CDN等中间代理服务器。private只能被终端用户的浏览器缓存不允许CDN等中继缓存服务器对其缓存。注意当cache-control与Expires共存的时候cache-control的优先级高 协商缓存的header参数 重点协商缓存都是由服务器来确定缓存资源是否可用的所以客户端与服务器端要通过某种标识来进行通信从而让服务器判断请求资源是否可以缓存访问
Last-Modified/If-Modified-Since:二者的值都是GMT格式的时间字符串
浏览器第一次跟服务器请求一个资源服务器在返回这个资源的同时在respone的header加上Last-Modified的header这个header表示这个资源在服务器上的最后修改时间浏览器再次跟服务器请求这个资源时在request的header上加上If-Modified-Since的header这个header的值就是上一次请求时返回的Last-Modified的值服务器再次收到资源请求时根据浏览器传过来If-Modified-Since和资源在服务器上的最后修改时间判断资源是否有变化如果没有变化则返回304 Not Modified但是不会返回资源内容如果有变化就正常返回资源内容。当服务器返回304 Not Modified的响应时response header中不会再添加Last-Modified的header因为既然资源没有变化那么Last-Modified也就不会改变这是服务器返回304时的response header浏览器收到304的响应后就会从缓存中加载资源如果协商缓存没有命中浏览器直接从服务器加载资源时Last-Modified的Header在重新加载的时候会被更新下次请求时If-Modified-Since会启用上次返回的Last-Modified值图例 Etag/If-None-Match 这两个值是由服务器生成的每个资源的唯一标识字符串只要资源有变化就这个值就会改变其判断过程与Last-Modified/If-Modified-Since类似 既生Last-Modified何生Etag HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题一些文件也许会周期性的更改但是他的内容并不改变(仅仅改变的修改时间)这个时候我们并不希望客户端认为这个文件被修改了而重新GET某些文件修改非常频繁比如在秒以下的时间内进行修改(比方说1s内修改了N次)If-Modified-Since能检查到的粒度是s级的这种修改无法判断(或者说UNIX记录MTIME只能精确到秒)某些服务器不能精确的得到文件的最后修改时间。 小结 利用Etag能够更加准确的控制缓存因为Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符。
Last-Modified与ETag是可以一起使用的服务器会优先验证ETag一致的情况下才会继续比对Last-Modified最后才决定是否返回304。