减少HTTP请求来加快页面响应速度的三种做法,CSS Sprites|内联图片|合并脚本和CSS

简介: 减少HTTP请求来加快页面响应速度的三种做法,CSS Sprites|内联图片|合并脚本和CSS

Web页面的响应速度对一个网站至关重要,响应得快,用户的反馈肯定是好评;响应的慢,用户会敬而言之。性能黄金法则告诉我,用户响应时间的80%-90%花费在为页面加载脚本、样式表,以及图片。那么如果能够在这三个方面做出调整,那么页面响应速度就能够得到大幅度的提高。


1)CSS sprites


在我最初的认知里,我以为CSS sprites就是图片地图,但其实并不是这样。图片地图主要应用于在一张图片上链接多个URL。CSS sprites和图片地图有相似之处,那就是都需要把多个图片合并成一张。


来看这样一张导航效果图,如图1。

image.png



它的背景图片是这样的,如图2。

image.png



该怎么实现这样的效果呢?


来看页面导航条的HTML元素构成:


<ul>

<li class="nav_1"></li>

<li class="nav_2"></li>

<li class="nav_3"></li>

<li class="nav_4"></li>

<li class="nav_5"></li>

</ul>


首先,需要为五个<li>标签指定 background-image,代码如下:


ul li {

   background-image: url(../ec_good_index.png);

   background-repeat: no-repeat;

   display: block;

   background-size: 63px 378px;

   width: 63px;

   height: 63px;

}


background-size很重要,因为图2中的图片实际大小是150*900,比我们想要的背景图要大,如果不设置background-size,那么就无法取到想要的图片导航。


接着,我们为每个li标签指定background-position,它是CSS sprites的核心,通过background-position,可以将li标签放到背景图期望的位置上,代码如下:


ul li.nav_1 {
    background-position: 0 0;
}
ul li.nav_2 {
    background-position: 0 -63px;
}
ul li.nav_3 {
    background-position: 0 -126px;
}
ul li.nav_4 {
    background-position: 0 -189px;
}


图片在y轴的向下的方向上递增,也就是说背景图上的第一个位置为0,0,那么第二个位置就是0,-63,也就是说第二张导航图在第一张的下方,偏移63像素,也就是第二章导航图的高度。第三张为-126,依次类推。


如果背景图上的图标是横向排列的,position坐标就有所不同,你可以实践一下。


CSS sprites是一种优秀的解决方案——更少的图片,更短的响应时间——对导航栏、链接等提供大量图片有很大的改善。在上例中,使用一张背景图,比使用5个背景图显然要少4次HTTP请求,很明显就可以缩短响应时间。


2)内联图片


通过使用data:URL模式可以在页面中展示图片还无需任何额外的HTTP请求,它的主要用例就是lazyload 的解决方案。在lazyload 中,图片在初始化时就使用的是data:URL的模式,请看的初始化参数,代码清单1。


$.fn.lazyload = function(options) {
        var elements = this;
        var $container;
        var settings = {
            event           : "scroll",
            effect          : "show",
            data_attribute  : "original",
            placeholder     : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"
        };
    if ($self.is("img")) {
      $self.attr("src", settings.placeholder);
    }
})(jQuery, window, document);

lazyload 在初始加载时的请求,截图如下,可以看得出,并没有发送HTTP请求。




data:URL的好处就是数据就在其URL自身当中,一个image可以通过<img src="data:image/png;base64,base64字符串"/>的方式进行表示——但,请尽量不要在表示大图片时使用它,因为base64编码后的内容也会比较大。


另外,比较遗憾的是,在我写这篇博客时,没有找到方法来通过Java代码把一个图片文件转成base64的字符串。


3)合并脚本和css


在我的传统观念里,代码一定要模块化,也就是说最好脚本、css要分开,通过不同的文件来减少代码之间的影响。但合并脚本和css后,网站的响应速度的确是有了大幅度的提升——我被迫接受把本和样式表合并在一起的观念,这很痛苦。


但经过尝试后,我发现,把很多脚本合并在一个脚本也能很好的保持代码的模块化,经过反复的调整,最终形成了自己并不完善的规范,但自我感觉还不错。


$(function() {
    YUNM.init("/components/common/ec.frag.xml", {
        debug : true, // 调试模式 【true|false】
        callback : function() {
            // 初始化页面中的组件
            initEnv();
            doBody();
            // 共同的顶级的
            doSome();
            doSwiper();
            quickNavigation();
            // 放在最后,安卓的微信、在移动网络下会阻塞
            // 微信朋友圈分享、发送给朋友、主动扫描二维码
            // TODO 如果有主动分享的需求,减少签名的请求
            weixinShare();
        }
    });
});

对于css来说,关键的就是在写css时,一定要从dom书的顶级到子集一层层扩展。


.weui-cells_form .weui-cell__ft {

   font-size: 12px

}


好了,到此为此,三种做法是点到了,但文章写得很散漫。希望自己在接下来有时间的话,重新来整理这篇文章,为读者展示一个更好的阅读体验。


相关文章
|
编解码 测试技术 索引
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
在我们简要介绍了 HLS 协议的基础知识,接下来我们详细介绍一种使用 Jmeter 编写压测 HLS 协议脚本的方法。
384 1
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
|
数据采集 UED
HTTP代理的响应速度对网页采集有何影响?
随着互联网发展,使用代理IP的人数增多,HTTP代理的纯净度成为重要质量指标。它能提高业务价值、增强稳定性与性能、优化带宽利用,并增加代理IP的可用性和存活时间,确保高质量的服务效果。选择代理服务时,纯净度是关键考量因素。
180 6
|
监控 测试技术 定位技术
HTTP代理IP响应速度测试方案设计与指标体系
随着数字化发展,网络安全、隐私保护及内容访问自由成为核心需求。HTTP代理因其技术优势成为热门选择。本文介绍HTTP代理IP响应速度测试方案,包括基础性能、稳定性、地理位置、实际应用、安全性测试及监控指标,推荐测试工具,并提供测试结果评估标准。
328 2
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
189 5
|
前端开发 JavaScript UED
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
数据采集 JSON API
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
本文探讨了在.NET环境下,如何通过异步方法和HTTP请求提高Web爬虫的响应速度和数据抓取效率。介绍了使用HttpClient结合async和await关键字实现异步HTTP请求,避免阻塞主线程,并通过设置代理IP、user-agent和cookie来优化爬虫性能。提供了代码示例,演示了如何集成这些技术以绕过目标网站的反爬机制,实现高效的数据抓取。最后,通过实例展示了如何应用这些技术获取API的JSON数据,强调了这些方法在提升爬虫性能和可靠性方面的重要性。
321 1
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
|
设计模式 移动开发 前端开发
CSS内联样式的使用,吐血整理
CSS内联样式的使用,吐血整理
174 6
|
前端开发
css图标合并——ClipPath Sprites技术
css图标合并——ClipPath Sprites技术
166 1
|
前端开发 容器
css【详解】—— margin属性(含margin百分比值,margin负值,margin合并,margin:auto,margin失效)
css【详解】—— margin属性(含margin百分比值,margin负值,margin合并,margin:auto,margin失效)
984 1

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    382
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    298
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    268
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    177
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    388
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    574
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    565
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    183
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    506
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    339