Keep-Alive通俗地讲,就是所谓的持久连接,对于http这种大量的短连接的服务来说,开启持久连接的好处可以节省大量的TCP连接过程的开销,据apache的官方文档称对包含大量图片的HTML文档造成的延时起到50%的加速作用。而同时现有操作系统越来越先进,建立连接的开销越来越小,像 linux 2.6的epoll,freebsd的kqueue,可以让程序不产生新进程或新线程的情况就能同时服务N多连接。与此同时,客户端比如 IE,Firefox也可以同时开多个线程取内容,如果开了Keep alive,反而有可能使服务器端管理大量的等待超时的tcp连接,使服务器端资源耗尽,而导致响应速度变慢。那么http的Keep-Alive到底是启用还是关闭呢?
说到Keep-Alive这个参数不得不说说这个参数在HTTP/1.0跟HTTP/1.1的一些区别,HTTP/1.0的默认情况下,是不会使用 Keep-Alive的,仅当客户端的头指定使用持久连接这个参数而且是要服务器预先知道传输内容的长度时才会与HTTP/1.0的客户端建立持久连接,这意味着那些长度不定的内容,诸如php等动态页面内容、SSI页面、以及服务器端生成的目录列表等内容一般来说将无法使用与HTTP/1.0客户端建立的持久连接。而对于HTTP/1.1的客户端来说,如果没有进行特殊指定,持久连接将是默认的连接方式。如果客户端请求的是未知长度的内容时将使用分块编码的方式进行传输,也就是大家在http头中看到的chunked。
由于http协议基于tcp协议,当然http协议也需要tcp的3次握手的过程,而对于一个完整的HTTP/1.0的请求和响应它有以下的一个请求过程
建立tcp连接 (syn; ack, syn2; ack2; 三个分组握手完成)
请求
响应
关闭连接 (fin; ack; fin2; ack2 四个分组关闭连接)
而对于一个完整的HTTP/1.1的请求和响应:
建立tcp连接 (syn; ack, syn2; ack2; 三个分组握手完成)
请求
响应
…
…
请求
响应
关闭连接 (fin; ack; fin2; ack2 四个分组关闭连接)
如果请求和响应都只有一个分组,那么HTTP/1.0至少要传输11个分组,才拿到一个分组的数据。而Keep-Alive可以更充分的利用这个已经建立的连接,避免的频繁的建立和关闭连接,减少网络拥塞。虽然Keep-Alive可以节约分组,提升响应速度,但是一旦超出某个平衡点,由于为了保持过多的连接,创建了太多的进程,导致系统不堪重负,系统响应变慢,而对于HTTP/1.0来说可以充分利用浏览器默认最大并发连接数比HTTP/1.1多的好处,实现不增加新域名的开销而更高的并行下载,减少域名解释的开销(注:IE 6,7在HTTP/1.0中默认最大并发连接数为4,在HTTP/1.1中默认最大并发连接数为2,IE8都为6,Firefox2在HTTP/1.0中默认最大并发连接数为2 在HTTP/1.1中默认最大并发连接数为8,firefox 3默认都是6),根据10年7月Google索引的42亿个网页的统计报告,每张网页里包含29.39个图片,7.09个外部脚本,3.22个外部CSS 样式表,如果设置了Keep-Alive并且合理控制Keep-Alive TimeOut这个参数可以大量的节约连接的开销,提高相应速度。如果设置不好,在大并发的情况小,因维持大量连接而使服务器资源耗尽,而对于目前国内大部分的用户使用的还是IE6,7的情况下关闭Keep-Alive可以充分利用浏览器默认最大并发连接数的好处实现不增加额外的开销页面快速的展示。
来自http://blog.netzhou.net/?p=141
分享到:
相关推荐
主要介绍了vue中keep-alive,include的缓存问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
今天讲一下网络方面的知识,希望对你的学习提供很好的帮助。
umi-plugin-keep-alive 中文说明 | 此 <KeepAlive> 功能基于 在线示例 umi 多 tabs 示例: 使用方法 安装 npm install umi-plugin-keep-alive --save # or yarn add umi-plugin-keep-alive 从 umi 中导出 KeepAlive...
如果需要频繁切换路由,这个时候就可以考虑用keep-alive了,来达到避免数据的重复请求的目的 keep-alive用来缓存组件,避免多次加载相应的组件,减少性能消耗。 简单一点来说就是从页面A链接到其他页面后回退到页面A...
vue使用keep-alive切换页面,2种方法实现页面保持滚动位置 下载后 先 npm i 安装依赖
将要缓存的组件使用 keep-alive 包裹住即可。 keep-alive优点的介绍: 1. 切换组件时,当前组件不会触发销毁的生命周期钩子。也就是说不会销毁了。 2. 切换回来时,也不会重新创建。(既然都没有被销毁,哪里来的...
1.keep-alive 能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 相似, 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件...
keep-alive用法:动态组件&vue-router keep-alive源码解析 keep-alive组件及其包裹组件的钩子 keep-alive组件及其包裹组件的渲染 二、keep-alive介绍与应用 2.1 keep-alive是什么 keep-alive是一个抽象组件:它...
在做电商有关的项目中,当我们第一次进入列表页需要请求一下数据,当我从列表页进入详情页,详情页不缓存也需要请求下数据,然后返回列表页,这时候我们使用keep-alive来缓存组件,防止二次渲染,这样会大大的节省...
v-keep-alive-chain vue缓存链控制,Vue前进刷新,后退不刷新(Forward refresh, back not refresh) Installation Use $ npm install v-keep-alive-chain // main.js import { mergeBeforeEachHook, ...
Nextjs-keep-alive 实现,vue中有这个专门的keep-alive插件,但是react没有,更别提nextjs了,这是现成的项目demo。 next9,10,11,12,13,14 及以上都可以用。直接使用或者移植到你的项目,非常方便。集成了发送...
keep-alive的设计初衷 有些业务场景需要根据不同的判断条件,动态地在多个组件之间切换。频繁的组件切换会导致组件反复渲染,如果组件包含有大量的逻辑和dom节点,极易造成性能问题。其次,切换后组件的状态也会完全...
目前keep-alive可以有效缓存一级,二级的路由菜单,3级以上菜单并不能做到缓存,这里提供一个解决方案: 在cachedViews中手动加上一级菜单和三级菜单之间,缺失的二级菜单的名字,这样二级菜单下的组件就会缓存了 ...
all-keep-alive Features 一个升级版的keep-alive,可以用来缓存所有的页面,包括复用页面。 可以在实现一些多标签页面,打开标签需要缓存页面数据的场景下使用 install npm install all-keep-alive 使用 import { ...
HTTP协议Keep-Alive模式详解
Vue路由器保持活动帮助器 Vue Router Keep-alive Helper是用于管理Vue.js项目中的缓存页面的自动工具,只能使用一行配置代码。 English |为什么需要此帮手: 当使用vue-router开发Vue.js的SPA项目时, <keep>总是...
React保持活力 保持组件状态并避免重复渲染的组件。 English | :sparkles: 特征不基于React Router,... 要将React Keep Alive与React应用程序一起使用: npm install --save react-keep-alive :hammer: 用法React Kee
欢迎对router-keep-alive做出React :waving_hand: :house: :cow_face: :pig_nose: 仅支持哈希路由模式! :backhand_index_pointing_left: React路由器组件,真正保持活动组件 安装 yarn add router-keep-alive # ...
Vue keep-alive组件页面缓存控制示例