CSS Sprites---减少HTTP请求次数 构建高性能网站

提到CSS Sprites不得不说一下与之相似的Image Maps:

Image Maps

  将一个页面中所要引用的图片整合成一个单一的图片文件,按顺序排好,再分切出里面的链接区域。这样对整个图片群的需求样式没有变,但减少了对图片的http请求数。

图1-1显示的是一个有五个图片组成的导航栏,每个图片对应一个独立的超链接。我们常规的做法,当然就是做五个图片,然后为每个图片做一个链接;但为了更高效,我们把五张独立的图片做成一张image map,这样从五个HTTP请求,就变成了一个HTTP请求,相应的响应时间也就会变的更快了。

  您可以试一下下面的两个链接,自己体会一下Image maps所带来的速度上的不同。

No Image Map

http://stevesouders.com/hpws/imagemap-no.php

Image Map

http://stevesouders.com/hpws/imagemap.php

  如果使用IE6在DSL(~900Kbps)的网络环境下,用image map的方法组成的导航栏要比用单独图片文件的所组成的导航栏要快56%(354ms 比 799ms).这是因为image map会减少四个HTTP请求。

  Image Map最常用的实现方式是使用HTML的map标签,把大图片分成一个一个的小块,并设置其不同的链接。如下:

<img usemap="#map1" border=0 src="http://7career.org/images/imagemap.gif">

<map name="map1">

<area shape="rect" coords="0,0,31,31" href="http://7career.org/home.html" title="Home">

<area shape="rect" coords="36,0,66,31" href="http://7career.org/gifts.html" title="Gifts">

<area shape="rect" coords="71,0,101,31" href="http://7career.org/cart.html" title="Cart">

<area shape="rect" coords="106,0,136,31" href="http://7career.org/settings.html" title="Settings">

<area shape="rect" coords="141,0,171,31" href="http://7career.org/help.html" title="Help">

</map>

  但是它所带来的缺点就是你得手动确定图片的坐标,这会比较乏味和容易出错,并且它只适合把图片都组合在一个长方形的区域里。

CSS Sprites (您可以参考YouTube和iGoogle的首页,它们就是采用的这种优化方式)

   与image maps类似,CSS Sprites也是把若干小图片合成一个大图片,但是CSS Sprites方式更灵活。为了实现CSS Sprites,是把各个小图片像组成一个棋盘一样地合成一个图片。如下图:   然后通过HTML中任何能支持背景图片的元素,如<span>或<div>,再通过CSS中的background- position属性来定位要显示的大图片中的某个小图片的位置。如下,就是要在上面给出的在图片中使用"My"这个图标来充当下面这个div的背景:

<div style="background-image: url(‘a_lot_of_sprites.gif‘);

       background-position: -260px -90px;

       width: 26px; height: 24px;">

</div>

  我把前面我介绍image map的例子转成CSS Sprites的形式:把导航栏的五个链接都放到一个名为navbar的DIV中。每个链接都有一个SPAN元素,在#navbar的样式中为SPAN元素定义了背景图片spritebg.gif,但每个SPAN都有一个不同的class以指明其具体显示的背景图片的偏移位置,正是利用了CSS中的 background-position属性。

<style>

#navbar span {

width:31px;

height:31px;

display:inline;

float:left;

background-image:url(/images/spritebg.gif);

}

.home { background-position:0 0; margin-right:4px; margin-left: 4px;}

.gifts { background-position:-32px 0; margin-right:4px;}

.cart { background-position:-64px 0; margin-right:4px;}

.settings { background-position:-96px 0; margin-right:4px;}

.help { background-position:-128px 0; margin-right:0px;}

</style>

<div id="navbar" style="background-color: #F4F5EB; border: 2px ridge #333;

width:180px; height: 32px; padding: 4px 0 4px 0;">

<a href="javascript:alert(‘Home‘)"><span class="home"></span></a>

<a href="javascript:alert(‘Gifts‘)"><span class="gifts"></span></a>

<a href="javascript:alert(‘Cart‘)"><span class="cart"></span></a>

<a href="javascript:alert(‘Settings‘)"><span class="settings"></span></a>

<a href="javascript:alert(‘Help‘)"><span class="help"></span></a>

</div>

  这比image map的方式的例子要更快:342ms VS 354ms,但是他们之间的实现方式只有很小的不同。但重要的是,这可比用单独的五个图片的例子要快57%了。

CSS Sprites

http://stevesouders.com/hpws/sprites.php

  我们看到,image map的方式要求所有的图片是连续的组合在一起的,而CSS Sprites没有这个限制。关于CSS Sprites的优缺点在Dave Shea的权威文章"CSS Sprites: Image Slicing‘s Kiss of Death"中已经有详细的介绍,但我已经从CSS Sprites中体会到它的优点:减少了HTTP请求,比image maps灵活。另一个让我没想到的优点是它减少了下载的数据量。大多数人可能会认为一个拼合成的大图片肯定要比这此小图片的总量要大,因为它会有一些小图片的间隔区域。实际上正相反,大图片减少了图片中的color
tables和格式信息等,而使得大图片比一堆小图片实际size要小一些。

   如果你的网站中有很多背景图片,按钮图片,导航栏图片,那么你应该用CSS Sprites方式来优化你的页面了。(您可以参考YouTube和iGoogle的首页,它们就是采用的这种优化方式)

还有一个好玩的例子:

CSSplay网站上的一个

The streaker - just for fun动画就是完美实例

http://www.cssplay.co.uk/menu/streaker

时间: 2024-08-28 11:42:12

CSS Sprites---减少HTTP请求次数 构建高性能网站的相关文章

利用css sprites减少图片请求

sprites是鬼怪,小妖精,调皮鬼的意思,初听这个高端洋气的名字我被震慑住了,一步步掀开其面纱后发觉很简单的东西,作用却很大 什么是CSS Sprites CSS Sprites是指把网页中很多小图片(很多图标文件)做成按规律排列的一张大图上,在显示的时候通过background-image.background-position显示图片特定部分达到和分散的一张张小图片一样的效果. JqueryUI的效果图如下 很多页面常用的小图标,但是我们看看每个小图标的源码的时候会发现,这些小图标的src

减少http请求次数

80%的最终用户响应时间花在前端程序上,而其大部分时间则花在各种页面元素,如图像.样式表.脚本和Flash等的下载上.减少页面元素将会减少HTTP请求次数.这是快速显示页面的关键所在. 1.Image maps组合多个图片到一张图片中.总文件大小变化不大,但减少了HTTP请求次数从而加快了页面显示速度.该方式只适合图片连续的情况:同时坐标的定义是烦人又容易出错的工作.使用CSS的background-image和background-position属性来现实所需的部分图片. 2.Combine

Web优化 --利用css sprites降低图片请求

sprites是鬼怪,小妖精,调皮鬼的意思,初听这个高端洋气的名字我被震慑住了,一步步掀开其面纱后发觉非常easy的东西.作用却非常大 什么是CSS Sprites CSS Sprites是指把网页中非常多小图片(非常多图标文件)做成按规律排列的一张大图上,在显示的时候通过background-image.background-position显示图片特定部分达到和分散的一张张小图片一样的效果. JqueryUI的效果图例如以下 非常多页面经常使用的小图标.可是我们看看每一个小图标的源代码的时候

ASP.NET 构建高性能网站 第1篇

网站优化需要考虑的方面 在用ASP.NET开发网站的时候,性能是永远需要考虑和关注的问题,性能不仅仅只是程序代码执行时候的速度,而是涉及到方方面面的东西. 就拿ASP.NET的一个请求来讲,从浏览器向服务器的ASP.NET网站发送请求开始一直到最后整个页面呈现在我们面前,其中请求经过的每一个步骤,都是有不同的调优方式的,而且调用的方法也很多,不仅仅只是常见的:缓存,多线程,异步等. 本系列的文章决定从两个大的方面来讲述调优: 前台调优:主要包含如何尽量的减少http请求,从http请求开始,到如

前端巧用localStorage做“缓存”,减少HTTP请求次数

场景: 载入某个页面,JS需要通过ajax请求获取某些数据 那么每次刷新页面都会有请求,如果这些数据对实时性要求并不高,显然这样做并不可取. 如何减少服务端的压力,使用localStorage可以解决此问题. //假设id是区分于其他的要储存的k值的一部分.var flag=0,k=null,v_arr=[],v_time=0,v='';var cday = new Date().getDate();var k = window.localStorage.getItem('name_'+id):

CSS sprites(css精灵)

关于雪碧图(css sprites)网上已经有非常详细的介绍,比如百度百科,最简单的来说,CSS sprite即把网页中比较小的一些小图片整合到一张图片文件中,再利用CSS的background-image属性插入图片,然后利用background-position属性对图片所需要的部分进行精确定位,从而达到减少服务器请求次数的目的. 这里主要使用雪碧图实现一个最简单的小图标导航展示.具体代码可以见附件1,素材详见附件2,效果图详见附件3. 本例使用内部样式的方式对整个文档格式化处理,最核心的部

CSS Sprites (CSS图像拼合技术)教程工具

什么是CSS Sprites? “Sprite”(精灵)这个词在计算机图形学中有它独特的定义,由于游戏.视频等画质越来越高,必须有一种技术可以智能的处理材质和贴图,并且要 同时保持画面流畅.“Sprite”就是这样一种技术,它将许多图片组合到一个网格上,然后通过程序将每个网格的内容定位到画面上. Sprite被定位到一副静态图片上,并且通过简单的程序或硬件即可正确定位到画面上,一幅幅图片就像是被“变”出来的,他们并没有单独占用内存,所以被取名为“Sprite精灵”. 上图是口袋妖怪的组合图片,可

读书笔记-高性能网站建设指南(2007)

人的思维往往会进入一种误区,认为"后面的","背后的"东西都是神秘的,伟大的影响力非凡的.所以很多书以"某某内幕"为题,很多程序猿以精通"底层开发"或"后端开发"为荣:同样的当网站出现问题时,我们第一时间想到的也是如何优化"后端".但这并不一定就是正确的,也许从前端入手,改善性能,将事半功倍. 绪言A:前端性能的重要性 在请求脚本时不会发生并行请求.这是因为在多数情况下,浏览器在下载脚本

高性能网站架构设计之缓存篇(5)- Redis 集群(上)

集群技术是构建高性能网站架构的重要手段,试想在网站承受高并发访问压力的同时,还需要从海量数据中查询出满足条件的数据,并快速响应,我们必然想到的是将数据进行切片,把数据根据某种规则放入多个不同的服务器节点,来降低单节点服务器的压力. 上一篇我们讲到了 Redis 的主从复制技术,当实现了多节点的 master-slave 后,我们也可以把它叫做集群,但我们今天要讲的集群主要是利用切片技术来组建的集群. 集群要实现的目的是要将不同的 key 分散放置到不同的 redis 节点,这里我们需要一个规则或