浏览器资源加载过程以及优化
2016-12-23 20:16
288 查看
当收到一个资源请求的时候将根据URL创建一个对应于要获得资源的加载器,然后开始对缓存资源进行响应。
如果客户端对cached进行了禁用的话,那么将先清空这个资源在缓存中对应的数据,然后进行资源请求(resourceRequest),否则的话就要去缓存池中查找是否存在这个资源。
这个缓存池实际是一个html页面,可以在地址栏中输入chrome://view-http-cache/就能得到,从这个页面中可以看出每一个资源都是通过一个唯一的URL进行标识的,所以如果两个资源URL不同即使内容相同,那么这两个也不是同一个资源。再者,资源缓存池的空间是有限的,一般通过最近最少使用算法进行对资源的删除,这也就是在缓存中资源的声明周期。
浏览器会将URL和这里的资源标识进行一一的比对,如果存在资源的话,浏览器会默默的记下来“奥 ,在缓存中存在这个资源哎”,以便于在以后http请求中加入相应的头部信息通知服务器,如果检查不存在的话啥也不做。注意无论是存在还是不存在都会到resourceRequest,那问题来了价差缓存中存不存在有什么用能?其实一个很大的作用就是防止在缓存中的文件由于时间太久容易过期,但是服务器还不知道,所以即便是检测到在缓存中存在这个资源也不会立即使用的,而是通过网络资源这种方式发送http请求同时服务器,由服务器判断是否更新。如果服务器得到http请求之后查看下http中信息发现不需要更新,那么服务器就会给客户端发送304状态吗,那么客户端就会很放心的从缓存中取出数据来使用了。从这里会发现,浏览器提供缓存的目的不是减少http请求的次数,而是减少http中携带的数据,从而减少网络负载。所以说即使存在缓存中也要交给resourceRequest。
当通过上述的三种方式到达resourceRequest之后,会通知resourceloader,这个资源加载器的作用仅仅是从网络或者磁盘缓存中提取数据,对于具体的网络请求则交给下面的各个模块,这些模块中产生http请求,对http头部的信息进行表述,建立连接,接受ACK等。
在资源加载中优化的方式有这么几种:
(1)DNS预取
当用户增在浏览网页的时候,浏览器会提取网页中的超链接,并且将域名提取出来,利用较少的网络资源对这些域名进行解析,一般会单独创建一个线程,这样不会阻塞页面的渲染进度。同时开发人员也可以明确的声明浏览器要预解析的域名,如下:
可以通过chrome://dns/ 查询本地有哪些网页在预取那些地址。
(2)较少http请求次数
当一些资源很小的时候,比如小的css和js可以嵌套在html文件中,对这些资源进行合并,从而减少http请求的次数。
(3)较少http携带数据的大小(较少网络负载)
利用浏览器提供的缓存机制减少请求的数据量,也可以通过对一些图片进行压缩进行减少。
(5)减少重定向的次数
重定向不仅增加了http请求的次数,还摒弃了DNS预期带来的好处。
(6)避免错误或不存在的的连接请求,因为他会长时间占用网络资源。
具体详细的网络内容请参考《http权威指南》
相关文章推荐
- 浏览器加载和渲染HTML的过程(标准定义的过程以及现代浏览器的优化)
- 让我们再聊聊浏览器资源加载优化
- 让我们再聊聊浏览器资源加载优化
- 【让我们再聊聊浏览器资源加载优化】
- [转]让我们再聊聊浏览器资源加载优化
- JavaScript 的性能优化:加载和执行(以及动态引入的外部 JS 文件在各浏览器中的加载顺序不一致)
- 也许是被误解的浏览器资源加载优化
- Android 下分批加载数据以及listView使用过程中的优化
- 前端性能优化之浏览器加载、解析、渲染的过程
- 让我们再聊聊浏览器资源加载优化
- 让我们再聊聊浏览器资源加载优化
- 【让我们再聊聊浏览器资源加载优化】
- 速度优化:只加载一个CSS满足所有要求、针对不同浏览器加载不同CSS、正式站改版测试如何不影响用户体验
- 浏览器的加载与页面性能优化
- Android ListView 性能优化-----(异步加载图片资源)
- 图片资源加载路径分析以及netbeans打包java程序,并包含图片资源
- 图片资源加载路径分析以及netbeans打包java程序,并包含图片资源
- 浏览器的加载与页面性能优化
- 网页重构之资源加载和优化
- 各浏览器对页面外部资源加载的策略