提高网站性能之 —— 减少图片HTTP 请求的方案

news/2024/5/17 12:59:14/文章来源:https://blog.csdn.net/weixin_33895475/article/details/85437024

《Higb Performance Web Sites》(中文名:“高性能网站建设指南”)这本书对于前端工程师来说,绝对值得一读。本人有幸从公司借阅了,但不幸的是感觉翻译有点怪怪的。尤其是在翻译CSS Sprites的关键部分,让人不知所云。幸亏原理比较简单,所以没有造成障碍。^_^
本人看书有做笔记、写示例、发牢骚的习惯,所以有了下文。个人备忘也罢,初学者入门也罢,反正赖在这里。所以,拍砖也罢,口水也罢,我都忍着,呵呵。。。

 

当一个页面的图片在没有使用任何方案的情况下,五个图片超链接就只能使用五个图标按钮。
代码如下:

<div style="border: 2px ridge rgb(51, 51, 51); background-color: rgb(244, 245, 235); width: 200px; padding-top: 4px;">
<center>         <href="javascript:alert('Home')" title="Home"><img src="http_request_img/home.gif" border="0"></a>
<href="javascript:alert('Gift')" title="Gift"><img src="http_request_img/gift.gif" border="0"></a>
<href="javascript:alert('Cart')" title="Cart"><img src="http_request_img/cart.gif" border="0"></a>
<href="javascript:alert('Settings')" title="Settings"><img src="http_request_img/settings.gif" border="0"></a>
<href="javascript:alert('Help')" title="Help"><img src="http_request_img/help.gif" border="0"></a>
</center>
</div>

效果如下:

注意:这五个按钮分别使用了五张图片

 

那么,五张图片就意味着你的该页面又多了五个HTTP请求,它将大大降低页面的呈现效率。增加的HTTP请求是导致页面性能下降的最大刽子手,所以我们应该尽量减少HTTP请求,而图片是增加HTTP请求的最大可能者,搞定它,事不宜迟!呵呵^_^

下面列出了三种解决方案:

 

方案一:图片地图(图像热点):它将用户的点击映射到一个操作,而无需向后端Web服务器发送任何请求。

代码如下:

<div class="panel_div" style="border:2px ridge #333333;background-color:rgb(244, 245, 235);width:180px;padding:4px 0px 0px 2px;">
     
<img usemap="#mymap" src="http_request_img/imagemap.gif" border="0" />
     
<map name="mymap"> <!-- img使用的map -->
         
<area shape="rect" coords="0,0,31,31" href="javascript:alert('Home');"/>
         
<area shape="rect" coords="36,0,66,31" href="javascript:alert('Gifts');"/>
         
<area shape="rect" coords="71,0,101,31" href="javascript:alert('Cart')"/>
         
<area shape="rect" coords="106,0,136,31" href="javascript:alert('Set')"/>
         
<area shape="rect" coords="141,0,171,31" href="javascript:alert('Help')"/>
     
</map>
</div>

效果如下:

注意:这五个按钮其实是在一张图片中

 

方案二:CSS Sprites:使用这种方式也可以将五张图片合并为一张图片,并且更为灵活。

代码如下:

<style>
/* 对div中所有span的样式设置 */
#navbar span 
{
  
/* 定义<span>标签将截取的图片宽度和高度 */
  width
:30px; height:31px;
  
/* 添加包含了所有图标的图片 */
  background-image
:url(http_request_img/imagemap.gif);
  display
:inline; float:left;
}
 
/* background-position:指定图标在CSS Sprites图片的偏移量
    margin-left 和 margin-right 则用来定位图标位置
 
*/
.home     
{ background-position:0 0; margin-left:2px;}
.gifts    
{ background-position:-35px 0; margin-left:50px;}
.cart     
{ background-position:-70px 0; margin-left:120px;}
</style>

<div id="navbar" style="border: 2px ridge rgb(51, 51, 51); padding: 4px 0pt; background-color:#ff0; width: 300px; height: 32px;">

  
<href="javascript:alert('Home')" title="Home">
     
<span class="home"></span></a> <!-- 注意:该span标签用来加载图片 -->

  
<href="javascript:alert('Gifts')" title="Gifts">
    
<span class="gifts"></span></a> <!-- 注意:该span标签用来加载图片 -->

  
<href="javascript:alert('Cart')" title="Cart">
    
<span class="cart"></span></a>  <!-- 注意:该span标签用来加载图片 -->
</div>

效果如下:

注意:在这个“CSS Sprites”中用到的图片就是“图片地图”中的同一张图片。(并特地只显示其中的三个图标)

 

CSS Sprites的原理:只是定位到图片其中的一块区域,并显示在某个位置而已。

CSS Sprites的优点:通过只使用一个图片减少了HTTP请求,并且比“图片地图”更灵活。

很多人会误认为:合并的图片要比分离的图片的总和要大,因为合并的图片中包含有附加的空白区域。
实际上,合并的图片要比分离的图片的总和要小,这是因为它降低了图片自身的开销(颜色表、格式信息,等等)。

 

方案三:内联图片:通过使用data: URL模式在Web页面中包含图片,且无需任何额外的HTTP请求。(IE目前不支持)

      1、内联图片的原理:允许将小块数据内联为‘立即数(immediate data)’,数据就包含在其URL自身之中。

      2、内联图片的格式:data:[<mediatype>][;base64],<data>

举例:一个内联图片可以定义为
<img src="data:image/gif;base64,asdfghjklaasdvdddddddaaaaaddddd++ddd======ssswdvdv33" >

其中“asdfghjklaasdvdddddddaaaaaddddd++ddd======ssswdvdv33”就是该图片的数据。

data: URL模式-> 基本用于内联图片,可以用在任何需要指定URL的地方,如:script和a标签中。

 

      3、内联图片的缺陷

            a> 不受IE的支持(IE7也如此);

            b> 保存数据的大小上受限制(Firefox 1.5支持高达100KB的数据);

            c> Base64编码会增加其图片的大小;

            d> 在跨越不同页面时不会被缓存

              (可以将内联图片作为背景图片保存在外部CSS样式表中来解决此问题,但会增加一个HTTP请求以换得数据被缓存的结果。);

 

在PHP技术中,使用函数file_get_contents从磁盘读取图片并插入到页面中来创建内联图片:

在其HTML中,使用style标签的href属性指定外部样式表文件时,直接指定到了一个PHP模版的.php文件(注意:不是.css文件),该PHP模版使用file_get_contents函数生成其样式表:

.home{ background-image:url(data:image/gif;base64,<?php echo base64_encode(file_get_contents("../img/home.gif")) ?>);}

其最终数据将是base64编码格式的图片data数据。

当然,使用ASP.NET技术生成其base64编码格式的图片data数据也不会很难。大家可以自行实验。

 

本人推荐:根据具体情况,使用方案一:图片地图(图像热点)方案二:CSS Sprites

 

附加知识:URL中的相关协议:http:、data:、file:、ftp:、mailto:、smtp:、pop:、dns:、whois:、finger:、daytime:、news:、urn: 等。这其中有一些是官方注册的,还有一些是由于广泛使用而被接受。

 

2010.8.27 补记:

【推荐】重典博客中的这篇文章:

 

在ASP.NET中自动合并小图片并使用CSS Sprite显示出来 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_714583.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php网站模板包括增删改查,PHP实现简单的增删改查

前面一章已经将php环境搭建好了&#xff0c;现在开始学习使用php实现简单的增删改查。前提是WampServer和mysql安装好了。1.用代码在mysql中新建一个叫myphp的数据库&#xff0c;在myphp数据库中建立一个user表。⑴在WampServer的安装目录下找到www文件夹&#xff0c;我的在E:\…

21个为您的网站和博客提供的免费视频播放器

2019独角兽企业重金招聘Python工程师标准>>> 很多设计师在都会在他们的网站使用视频播放器。在线视频播放器无需为简单的用户和Web开发人员提供过多的介绍&#xff0c;它简单易用&#xff0c;为您建站时提供了灵活性和创造性&#xff0c;您可以添加无限数量的视频&a…

你的网站上显示Alexa世界排名的代码(表)

Alexa世界排名众多站长已经不会陌生了&#xff0c;今年将它炒的非常厉害&#xff0c;众多网站不论是拉广告还是做宣传都会以Alexa世界排名作为依据。因此&#xff0c;在这里就把Alexa排名的代码为各位需要的站长们介绍一下&#xff1a; 第一种&#xff1a;排名按钮式代码 说明&…

手机网站重构

前言 做WEB重构的同学都应该知道,我们一般需要在一个操作系统 (Windows XP)和4种以上的浏览器(IE678,Firefox,Chrome,Opera等)上测试页面的兼容性。 相对而言,手机上的页面兼容性测试,相当痛苦!手机光操作系统都有S60V3,S60V5,MTK,Android, Windows Mobile等等,每个操作系统上除…

换服务器原网站数据会丢失吗,ecs服务器更换操作系统后原服务器数据还在吗?...

ecs服务器更换操作系统后原服务器数据还在吗&#xff1f;这个知识点非常重要&#xff0c;我这里的话给大家简单的介绍一下&#xff0c;首先的话我们服务器如果更换操作系统重装操作系统&#xff0c;其实都是一个意思&#xff0c;更换系统之后呢&#xff0c;我们原来的数据库原来…

利用TP-Link+花生壳建立属于自己的网站

最近很想做一个自己的网站&#xff0c;苦于没有经费&#xff0c;也没有服务器&#xff0c;更加没有经验&#xff0c;所以只能寻找免费的解决方案。 身边有的工具只有一台TP-link&#xff0c;手提式电脑和能上网的环境&#xff0c;所以果断利用TP-link&#xff0c;没有TP-link的…

模板引擎工作原理_zuma致:新手SEO须知搜索引擎工作原理

SEO是一种优化方式&#xff1a;利用搜索引擎的规则提高网站在相关中搜索引擎内的自然排名。其目的是为了&#xff1a;为网站提供好的展示和排名&#xff0c;让其在行业内占据领先地位&#xff0c;获得流量和品牌效应收益。那么搜索引擎是怎么工作的你了解多少呢&#xff1f; 今…

怀疑Alexa算法调整,清理一批网站

因为自己有Blog&#xff0c;所以一直在关注我网站在Alexa的排名&#xff0c;前几天看到排名是三个月平均在300万左右&#xff0c;7天排名在120万左右&#xff0c;今天再看了一下&#xff0c;发现排名有了惊人的提高&#xff0c;7天排名在643,503&#xff0c;一个月排名在2,012,…

网站服务器被攻击的形式,网站被攻击主要方式有哪些?

原标题&#xff1a;网站被攻击主要方式有哪些&#xff1f;网站在运营的过程当中通常会遇到一些问题&#xff0c;比如网站被降权&#xff0c;网站被攻击。关于被降权&#xff0c;往往稍加调整就会有所好转&#xff0c;可是关于被攻击就不是那么简单了。网站被攻击通常有哪些方式…

window.location.href不打开新窗口_在使用网站时,什么情况该用新窗口打开?

页面是否用新的页面打开&#xff0c;只是一个很小的细节。但无论是面向普通消费型用户的网站&#xff0c;还是说面向企业用户的办公软件&#xff0c;无一例外都会遇到这些现实的问题&#xff0c;那么如何进行友好的交互操作是产品设计者不断的追求。页面是否进行新页面打开&…

大型网站架构演变和知识体系【转载】

转自&#xff1a;http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html 之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详…

本地mysql搭建网站_本地搭建网站时的具体步骤

对于一些想建设网站但是技术不是很熟练的朋友来说在本地环境搭建一个网站来练练手还是很有必要的&#xff0c;那么本地环境网站如何搭建呢?下面星若传媒小编就来教你怎么搭建本地环境网站。下面我就以安装wordpress程序为例&#xff0c;通过配置环境&#xff0c;为大家讲解在本…

linux运维搭建官网,Linux运维学习之LAMP搭建个人博客网站

Linux运维学习之LAMP搭建个人博客网站个人博客、lamp从开始学习Linux&#xff0c;我就知道搭建博客&#xff0c;也很好奇怎么搭建的博客&#xff0c;今天终于学到了这个知识点&#xff0c;网上的很多的教程感觉都是含糊其辞&#xff0c;对于基础稍微有点薄弱的&#xff0c;根本…

HTML小作业---网站首页/新闻栏目/banner图/js下拉框

html小作业&#xff1a; 期末小作业&#xff0c;一个官网首页。 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1PQEjTkzD1YRWuGzuwIhA9A 提取码&#xff1a;fzng 效果预览&#xff1a;

[asp.net]网站数据安全之验证码

数据安全是网站实现必不可少的其中一环&#xff0c;其中最基本的就有防止暴力破解这一类的机器人攻击。 机器人攻击&#xff0c;顾名思义&#xff0c;单纯地由程序算法计算出用户名对应的密码&#xff0c;达到破解账户的功能。 机器人攻击的原理如下&#xff1a; 网页与服务器是…

Flash互动网站设计学习-Flash发展历史

Flash互动网站设计学习历程(一) Flash发展历史 打开Flash网站&#xff0c;我就被其绚丽的视觉效果、小巧的体积、不用安装插件等优势吸引了&#xff0c;我决定好好研究一番&#xff0c;写此文章主要是激励我能坚持学习FALSH互动和加深对知识的理解。 Flash发展历程 Flash最早期…

网站遭遇DDoS***的解决方案

一、事件发生 春节长假刚过完&#xff0c;WEB就出现故障&#xff0c;下午1点吃完回来&#xff0c;立即将桌面解锁并习惯性的检查了Web服务器。通过Web服务器性能监视软件图像显示的向下滑行的红色曲线看到WEB出现问题了。 根据上述的问题&#xff0c;我马上开始核查Web服务器的…

百度云存储教程---免费建立自己的静态网站

欢迎訪问的我个人站点&#xff1a;点击打开链接--我的个人站点 想建设个人站点的朋友能够找我聊。无门槛&#xff0c;就能永远自己的永久域名和server空间&#xff0c;全然免费哦 曾经开发的站点苦于没有云server&#xff0c;站点没地方挂&#xff0c;如今百度出了云存储和应…

使用thrift做c++,java和python的相互调用 - jinghong - ITeye技术网站

使用thrift做c,java和python的相互调用 - jinghong - ITeye技术网站使用thrift做c,java和python的相互调用 博客分类&#xff1a;linuxlinuxthriftcjavapython linux上安装thrift见 http://jinghong.iteye.com/blog/1102535 thrift做为跨语言调用的方案有高效&#xff0c;支持…

中国网站备案制度——祸国殃民

网站备案制度繁琐复杂时间长成本高&#xff0c;建网站要备案&#xff0c;转接网站主机要备案&#xff0c;修改备案信息(哪怕是一个电话)也要备案&#xff0c;新增网站也要备案。网站那好后&#xff0c; 工信部还要抽查核对信息&#xff0c;核对错误要注销备案。。。。总而言之&…