当咱们在浏览网页的时候,对浏览速度有一个重要的影响因素,就是浏览器的并发数量。并发数量简单通俗的讲就是,当浏览器网页的时候同时工做的进行数量。javascript
若是同时只有2个并发链接数数量,那网页打开的时候只能依赖于这2条线程,前面若是有打开慢的内容,就会直接影响到后面的内容打开。可是若是同时有更多的并发链接数,这样就会大大的提升网页加载速度。详情可查看咱们以前发布的文章:并发链接数对浏览器加载速度的测试。浏览器的并发链接数也并不是越大越好。html
下表归纳了基于主机上运行的IE浏览器的版本的最大并发链接数、主机的链接速度和服务器的受支持的协议版本。java
1,HTTP客户端通常对同一个服务器的并发链接个数都是有限制的。node
实际上,浏览器确实使用并行链接,但它们将并行链接的总数限制为少许(一般为四个)。服务器能够自由地关闭来自特定客户端的过多链接。web
2,一些主流浏览器对HTTP 1.1和HTTP 1.0的最大并发链接数目,能够参考以下表格:ajax
浏览器chrome |
HTTP / 1.1数据库 |
HTTP / 1.0编程 |
IE 11json |
6 |
6 |
IE 10 |
6 |
6 |
IE 9 |
10 |
10 |
IE 8 |
6 |
6 |
IE 6,7 |
2 |
4 |
火狐 |
6 |
6 |
Safari 3,4 |
4 |
4 |
Chrome 4+ |
6 |
6 |
歌剧9.63,10.00alpha |
4 |
4 |
Opera 10.51+ |
8 |
? |
iPhone 2 |
4 |
? |
iPhone 3 |
6 |
? |
iPhone 4 |
4 |
? |
iphone 5 |
6 |
? |
Android2-4 |
4 |
? |
3,Firefox 浏览器的最大并发链接数
在Firefox中的地址栏输入“about:config中”,而后搜索并修改以下两个配置项目便可:
network.http.max持久的链接 - 每一个服务器
network.http.max持久的链接 - 每一个代理
网络。HTTP。最大的链接:设置的Http同时链接的最大数量
network.http.max持久的链接,每台服务器是链接同一个服务器容许的最大持久链接数,默认为6,能够不用更改。
network.http.max持久的链接 - 每一个代理每一个代理服务器容许的最大持久链接数
公司用户使用代理服务器,可是外面的客户通常不使用代理,火狐的维基推荐的network.http.max持久的链接,每台服务器设置为:<= 10。
4,IE 浏览器的最大并发链接数
用“注册表编辑器”命令打开注册表编辑器,找到:
[HKEY_CURRRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings],能够看到MaxConnectionsPerServer和MaxConnectionsPer1_0Server
这两个键(分别是针对HTTP 1.1和HTTP 1.0的设置)
对于IE 9
[HKEY_CURRRENT_USER \ Software \ Policies \ Microsoft \ Internet Exploer \ Main \ FeatureControl,能够看到FEATURE_MAXCONNECTIONSPER1_0SERVER和FEATURE_MAXCONNECTIONSPERSERVER
这两个键(分别是针对HTTP 1.1和HTTP 1.0的设置)
************************************************** **************************
5,假定一个浏览器的并发链接请求数为10,一般同一时间内会有多个用户并发访问网站。又考虑到,一个Http链接请求在同一时间只能被一个线程访问。
因此,IHS服务器的httpd.conf里的maxclients(容许创建的总线程数)要可以处理峰值时刻的浏览器链接请求才行。
同时,考虑不是全部的链接请求都会到was server,有的链接只是为了在web服务器上取静态资源,因此,was上的线程池数目(Thread pools :50 )会远小于IHS server上的maxclients值譬如400)。
************************************************** *****************************
6,HTTP 链接请求与线程
HTTP链接是复杂,有状态的对象,因此它必须被妥善管理。一个HTTP 链接请求在同一时间只能被一个线程访问。
HttpClient的使用一个叫作的Http链接管理器的特殊实体类来管理的Http链接.Http链接管理器在新建的HTTP链接时,做为工厂类;管理持久的http链接的生命周期;同步持久链接(确保线程安全,即一个HTTP链接同一时间只能被一个线程访问)。
若是一个的Http链接被释放或者被它的消费者明确表示要关闭,那么底层的链接就会和它的代理进行分离,而且该链接会被交还给链接管理器。这是,即便服务消费者仍然持有代理的引用,它也不能再执行I / O操做,或者更改的Http链接的状态。
如图7所示,链接池管理器
链接池管理器是个复杂的类,它管理着链接池,能够同时为不少线程提供HTTP链接请求。当请求一个新的链接时,若是链接池有有可用的持久链接,链接管理器就会使用其中的一个,而不是再建立一个新的链接。
当使用了请求链接池管理器后,HttpClient的就能够同时执行多个线程的请求了。
链接池管理器会根据它的配置来分配请求链接。若是链接池中的全部链接都被占用了,那么后续的请求就会被阻塞,直到有链接被释放回链接池中。
8,线程池的原理:
线程池的原理很简单,相似于操做系统中的缓冲区的概念,它的流程以下:
线程池在尚未任务到来以前,建立必定数量的线程,放入空闲队列中。这些线程都是处于睡眠状态,即均为启动,不消耗CPU,而只是占用较小的内存空间。当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。
线程池能节约大量的的系统资源,使得更多的CPU时间和内存用来处理实际的商业应用,而不是频繁的线程建立与销毁
每一个线程须要大约1MB内存,线程开的越多,消耗的内存也就越大。
在什么状况下使用线程池:
1.单个任务处理的时间比较短
2.将需处理的任务的数量大
9,数据库链接池:
数据库链接池的解决方案是在应用程序启动时创建足够的数据库链接,并讲这些链接组成一个链接池(简单说:在一个“池”里放了好多半成品的数据库联接对象),由应用程序动态地对池中的链接进行申请,使用和释放。对于多于链接池中链接数的并发请求,应该在请求队列中排队等待。而且应用程序能够根据池中链接的使用率,动态增长或减小池中的链接数。
链接池技术尽量多地重用了消耗内存地资源,大大节省了内存,提升了服务器地服务效率,可以支持更多的客户服务。经过使用链接池,将大大提升程序运行效率,同时,咱们能够经过其自身的管理机制来监视数据库链接的数量,使用状况等。
1)最小链接数是链接池一直保持的数据库链接,因此若是应用程序对数据库链接的使用量不大,将会有大量的数据库链接资源被浪费;
2)最大链接数是链接池能申请的最大链接数,若是数据库链接请求超过此数,后面的数据库链接请求将被加入到等待队列中,这会影响以后的数据库操做。
数据库链接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤其突出。一个数据库链接对象均对应一个物理数据库链接,每次操做都打开一个物理链接,使用完都关闭链接,这样形成系统的性能低下。
10,WebSphere Application Server性能
http://websphere.sys-con.com/node/46514/print
构建服务器应用程序的一个过于简单的模型是:每当一个请求到达就建立一个新的服务对象,而后在新的服务对象中为请求服务但当有大量请求并发访问时,服务器不断的建立和销毁对象的开销很大。
在面向对象的编程中,建立和销毁对象是很浪费资源的,由于建立一个对象要获取内存资源或者其它更多资源。在Java的中更是如此,虚拟机试图跟踪每个对象,以便可以在对象销毁后进行垃圾回收。因此,提升程序效率的一个手段就是尽量减小建立和销毁对象的次数。利用已有的对象来服务就是“池化资源”技术产生的缘由。
图1显示了一个须要后端处理的应用程序请求流程,并说明了在处理用户请求时线程池之间的关系。
HTTP侦听器
HTTP侦听器负责在HTTP服务器级别建立线程。这里发生的大多数处理是静态页面服务,或HTTP post / GET传递命令到后端。这是必须考虑的第一级线程配置。
Web容器
Web容器负责在应用程序服务器级别建立线程池。此级别的大多数处理包括servlet,JSP,EJB,动态页面建立和后端传递处理。Web容器是必须配置的第二级线程池配置。
ORB容器 ORB容器负责在对象级建立线程池。这里发生的大部分处理包括处理基于非Web的客户端。ORB容器是必须配置的线程池配置的第三级。
数据源
数据源级负责建立从数据库或“传统”系统访问的链接线程。这些线程是必须解决的第四级配置
实际状况(china):
不少客户端软件能够修改电脑的最大链接数,好比:迅雷、暴风影音等。
以前咱们曾跟你们分享过如何修改IE浏览器的并发链接数,若是你正在使用IE7及如下的更低版本,不妨尝试将链接数修改到6,这将有助于提高打开网站的速度。
举个例子:
IE8

和IE6彻底不一样的瀑布图,其特色有:
- 最大并发HTTP链接数为6个。
- javascript文件已经不会阻塞其余资源的加载,甚至多个javascript文件能够一块儿加载,而且会保证执行的顺序。
- 会分析HTML结构,优先下载script和link标签订义的外部资源。
Firefox3.6

和IE8的几乎彻底同样:
- 最大并发HTTP链接数为6个(可在about:config中修改)。
- javascript文件不会阻塞其余资源的加载,多个javascript文件能够一块儿加载。
- 会分析HTML结构,优先下载script和link标签订义的外部资源。
Firefox4 beta12

不知是由于设计理念上的不一样,仍是由于beta版未照顾到这一块,Firefox4反而退化了,和Firefox3.6的区别主要体如今对资源类型的处理上,Firefox4再也不严格地优先下载script和link标签订义的外部资源,而是按照HTML结构中出现的顺序来进行加载。
Chrome8

Chrome自带的工具不能很清楚地表示各请求的开始时间,因此使用了Fiddler的瀑布图,从图上能够看出,Chrome也是比较特立独行的一位,其特色有:
- 最大并发HTTP链接数为6。
- head部分的资源会单独下载,且阻塞body中的其余资源的加载。
- 会优先加载script和link标签订义的资源。
Opera11

先报怨一下,Dragonfly不怎么好用来着……Opera的资源加载也比较有特点,并且很难看出规律,只能大体总结一下:
- Opera的最大并发HTTP链接数默认为16,可在opera:config - Performance - Max Connections Server查看和修改。
- javascript文件的加载会阻塞其余script和link标签订义的外部资源的加载,如图中的2.js。但不会阻塞图片等其余资源的加载,如图中的3.js。
- 会必定程度上对资源的优先级进行优化,但因为javascript文件要阻止后续部分资源的加载,又为了充分利用最大HTTP链接数,所以不能严格先加载全部的script和link标签订义的资源,致使瀑布图上各种型资源有相互穿插,难寻规律。
这仍是在比较乐观的状况下,有几秒加载完毕的,按道理来讲,图片都不大,应该都在1秒范围内就才是在接收范围内。固然和用户自身的带宽也有关系,可是从个人观察来看,是分批加载的。
因而乎我查看资料,发现。
从Yahoo关于网站优化的经典14条建议,在V2版中,已经更新到35条了,其中有须要减小请求链接数和减小DNS解析次数,因为在http协议中有对浏览器并发请求链接数的限制,1.1版本中规定了是2个(相关资料能够查看文章的结尾),因而一般的优化网站加载速度的方法是采用多个域名增长浏览器对同一网页的请求并发链接数。
2、下面我来看看各大电商是怎么处理的。
1.京东(www.jd.com)
京东图片域名一直是老域名360buyimg.com。
http://img13.360buyimg.com/da/jfs/t1879/131/2924301202/126044/7c7cbf5c/56f3b58fN37c1340a.jpg
好比说这张图片,你能够复制打开这个连接,把前面的二级域名的Img13换成img十一、img十二、img13等,发现都是能够打开的,并且通常是同一IP,有的同窗说换成img八、img一、img2等打不开,这个是策略问题。这只是举个栗子。
2.天猫(www.tmall.com)
图片CDN域名有不少,tbcdn.cn、alicdn.com 等
也是同理,不过最近HTTPS转变后都换成img.alicdn.com了。缘由不明。
3、说一下Firefox浏览器
在Firefox
地址栏中输入:about:config
在搜索项输入:network.http.max-connections
老版本值是30,我这个版本是256,说明有改进。
咱们再输入:network.http.max-persistent-connections-per-server
进行搜索,发现是6。
你能够写个Demo测试一下,写个小循环,而后访问同一个域名(推荐用 Ajax 方式),而后后台sleep
一会,你就能看出效果。以前有人作太低版本的测试,得出结论。
IE8的并发链接数限制为10;
Firefox 和 chrome 的并发链接数都为6,可能各个版本有区别。做为一个站长,或者说一个完善的产品,这个是不得不考虑的。
解决方案:
1.给定一组域名,如:img1.baidu.com、img2.baidu.com、img3.baidu.com、img4.baidu.com... ...
2.这组域名指向同一个源,或者说最终源是一个。
3.上传图片(静态文件)的时候随机返回这组域名中的其中一个便可,这样图片的访问域名就不会出现只是一个域名了。