论,如何定义一个前端工程师。前天看了篇文章,做者把前端攻城狮称做是全部攻城狮角色中最具备也最须要‘工匠精神’的攻城狮。从最直观的角度来说就是视觉方面,不只要百分百还原设计稿(静态以及动态交互),还要考虑代码是否工整、冗余、复用、性能等方面问题,并且说得更博大一些还要培养点产品和设计的思惟(培养个P啊,这是开发和他们的鸿沟,纯属扯淡。)正儿八经的对于前端不仅是会JavaScript就好了,要学的东西真是太多了,做为一名初生牛犊的我,仍是至关有必要扩展下一个web开发要掌握的知识面,好比今天要总结的缓存机制。css
Web缓存是指一个Web资源(如html页面,图片,js等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,若是是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,仍是向源服务器再次发送请求。比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,若是网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。只有当网站明确标识资源已经更新,浏览器才会再次下载网页。html
本文要介绍的是浏览器缓存,其实就是指服务器和客户端(浏览器)之间的一个副本(static sources like html/css/js)。一个完整的网络请求大概是这样的;
第一次请求: 客户端发送请求 -> 本地无缓存 -> 向服务器发送请求 -> 返回静态资源 -> 呈现(并缓存到本地)前端
第二次请求:以下图一所示:web
这里要先说下缓存中相关的消息报头参数,具体如图二(标红处重点理解 ):数据库
如今讲图一中发生的第二次请求,这次请求会读取本地的缓存副本,但首先读取的时候浏览器会判断缓存的过时时间(假如设置的话),假若没有过时就会读取缓存。假若过时就会和服务器校对ETag
(Entity tag用于缓存验证)若是ETag
非空,浏览器就会把ETag
的值给If-None-Match
进行对比,同时,也会对比Last-Modified
和If-Modified-Since
的值,若是相同则证实服务器没有修改内容,就会返回304 Not-Modified
读取本地缓存,HTTP304
状态码是指该本地缓存资源与服务端资源相比没有被修改过因此会直接读取本地缓存内容,反之从新向服务器发出请求并返回。此时Last-Modified
和ETag
的值都会被重置。segmentfault
以上所述都是本身总结的一些知识,若有错误还请指正,感谢。浏览器
- 感谢如下前辈的解惑,向大佬看齐【敬礼!】
- http://www.alloyteam.com/2012...
- https://segmentfault.com/a/11...