网页中包含的资源(图片、js、css、iframe等)引起的http请求基本上都来源于同一个域名,有的网站对静态资源文件使用了独立的无cookie域名。YSlow提倡的高性能网站准则中有一条“reduce DNS lookups”,减少域名数量以便减少域名解析所需要的时间,但是,有的情况下,适当的增加网页中使用的域名数却可以提升网页的速度。
首先,我们来看一个例子:
图片下载被阻塞:
http://blog.tugai.net/performance/sharding_dominant_domain/block_download.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>block image download</title> </head> <body> <p>只有前10张图片(IE,Firefox前6张)并行下载。</p> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=1" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=2" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=3" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=4" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=5" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=6" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=7" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=8" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=9" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=10" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=11" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=12" /> </body> </html>
在这个例子中,网页包含12张图片,每张图片加载需要4秒钟。
以下是网页加载时的瀑布图:
IE6加载时的瀑布图
Firefox3加载瀑布图
从上图中可以看到,IE6下,前10张图片是并行下载,后2张要在前10张图片下载完成后才开始下载,Firefox下情况比较类似,只不过图片是每6张一组下载。这是因为浏览器限制了同一个域名下最大并行下载数量(或者说最大连接数),当并行下载数到达上限时,其后的http请求就必须排队等待,除了图片外,css、html等网页资源也存在同样的问题。同一域名的最大并行下载数量与浏览器类型、浏览器版本、HTTP版本有关,以下是网上收集的数据,并未核实。
并行下载是加快网页显示非常关键的一项技术,如何多图片的并行下载呢?我们再来看另外一个例子。
多图片并行下载:
http://blog.tugai.net/performance/sharding_dominant_domain/parallel_download.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>parallel image download</title> </head> <body> <p>所有图片并行下载。</p> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=1" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=2" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=3" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=4" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=5" /> <img src="http://blog.tugai.net/performance/mime.php?type=img&v=6" /> <img src="http://blog1.tugai.net/performance/mime.php?type=img&v=7" /> <img src="http://blog1.tugai.net/performance/mime.php?type=img&v=8" /> <img src="http://blog1.tugai.net/performance/mime.php?type=img&v=9" /> <img src="http://blog1.tugai.net/performance/mime.php?type=img&v=10" /> <img src="http://blog1.tugai.net/performance/mime.php?type=img&v=11" /> <img src="http://blog1.tugai.net/performance/mime.php?type=img&v=12" /> </body> </html>
再来看看该网页的瀑布图:
IE6加载瀑布图
Firefox3加载瀑布图
上例中已经实现了多图片的并行下载,网页加载时间从7.9s减少到4s,速度提升了一倍。从源代码中可以看到,图片使用了不同的域名,每个域名连接的图片不超过6张。本例的关键技术就是使用了多域名来区分资源(包括图片、css等)。
IP和域名
“每台服务器的最大连接数”,这里说的服务器是指的URL地址中的域名,而不是服务器的IP地址,所以,同一IP、不同域名会被看成不同的服务器。利用Apache的ServerAlias可以很方便的在同一域名下增加多个别名域名,相应的,在域名解析时只需要添加一个别名的CNAME记录即可。
多少个域名合适
在前面的内容中你已经看到了,两个域名比一个域名好,三个域名是否会比两个域名好呢?10个域名呢?YSlow的开发者、Yahoo网页性能专家Steve Souders在他的性能研究报告中指出,从一个域名增加到两个域名,网站性能能够得到提升,当域名大于两个时,会对网页加载时间产生负面影响。这个问题的最终答案是域名的数量与网页资源的数量、体积有关,但是,按着经验来说,两个足以。
如何划分资源
如何给指定的资源分配多域名中的一个域名呢?非常关键的一条原则是保证一个资源在分配时总是分配到固定的一个域名,这样,如果资源已经在浏览器缓存了的话,下次访问时就可以在缓存中读取,避免从其他域名再次下载资源。其中一种方法是,使用哈希函数转换资源的文件名为整数,再根据约定的算法选择域名。
当然,手动指定是最原始但有效的方法。
from http://wzfjesun.blog.163.com/blog/static/14245693920124148239436/
相关推荐
- **使用子域**:例如将图片资源部署在`img.example.com`上,而将JavaScript文件部署在`js.example.com`上。 - **考虑CDN服务**:使用CDN可以将资源分布在全球多个位置,进一步提高加载速度。 #### 9. 最小化iframe...
8. **切分组件到多个域**:将页面组件分散到多个域名下可以实现并行下载,但要注意不要超过浏览器同时下载的数量限制,以防止与DNS查找冲突。 9. **最小化iframe数量**:iframe虽然在某些场景下有用,但它增加了DOM...
为了实现这一目标,开发者可以通过合并和压缩CSS、JavaScript和图片等静态资源。这是因为HTTP1.x协议中,浏览器不允许响应数据交错到达,也就是说,一旦开始传输一个响应,下一个响应就必须等待当前响应完全结束后...
嵌入式八股文面试题库资料知识宝典-华为的面试试题.zip
训练导控系统设计.pdf
嵌入式八股文面试题库资料知识宝典-网络编程.zip
人脸转正GAN模型的高效压缩.pdf
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
少儿编程scratch项目源代码文件案例素材-鸡蛋.zip
嵌入式系统_USB设备枚举与HID通信_CH559单片机USB主机键盘鼠标复合设备控制_基于CH559单片机的USB主机模式设备枚举与键盘鼠标数据收发系统支持复合设备识别与HID
嵌入式八股文面试题库资料知识宝典-linux常见面试题.zip
面向智慧工地的压力机在线数据的预警应用开发.pdf
基于Unity3D的鱼类运动行为可视化研究.pdf
少儿编程scratch项目源代码文件案例素材-霍格沃茨魔法学校.zip
少儿编程scratch项目源代码文件案例素材-金币冲刺.zip
内容概要:本文深入探讨了HarmonyOS编译构建子系统的作用及其技术细节。作为鸿蒙操作系统背后的关键技术之一,编译构建子系统通过GN和Ninja工具实现了高效的源代码到机器代码的转换,确保了系统的稳定性和性能优化。该系统不仅支持多系统版本构建、芯片厂商定制,还具备强大的调试与维护能力。其高效编译速度、灵活性和可扩展性使其在华为设备和其他智能终端中发挥了重要作用。文章还比较了HarmonyOS编译构建子系统与安卓和iOS编译系统的异同,并展望了其未来的发展趋势和技术演进方向。; 适合人群:对操作系统底层技术感兴趣的开发者、工程师和技术爱好者。; 使用场景及目标:①了解HarmonyOS编译构建子系统的基本概念和工作原理;②掌握其在不同设备上的应用和优化策略;③对比HarmonyOS与安卓、iOS编译系统的差异;④探索其未来发展方向和技术演进路径。; 其他说明:本文详细介绍了HarmonyOS编译构建子系统的架构设计、核心功能和实际应用案例,强调了其在万物互联时代的重要性和潜力。阅读时建议重点关注编译构建子系统的独特优势及其对鸿蒙生态系统的深远影响。
嵌入式八股文面试题库资料知识宝典-奇虎360 2015校园招聘C++研发工程师笔试题.zip
嵌入式八股文面试题库资料知识宝典-腾讯2014校园招聘C语言笔试题(附答案).zip
双种群变异策略改进RWCE算法优化换热网络.pdf