网络编程
位置:首页>> 网络编程>> 网页设计>> [译]图片优化 第五章:AlphaImageLoader(2)

[译]图片优化 第五章:AlphaImageLoader(2)

作者:s5s5 来源:[米随随] s5s5 发布时间:2010-08-29 18:39:00 

标签:AlphaImageLoader,图片优化,滤镜,IE6

时间与内存 – 副作用#2和#3

另一个使用AlphaImageLoader的副作用是它要使用更多的内存。这个问题,我们一般会认为访问者的电脑内存是足够的,但对于更早的电脑(可能还在运行IE6或更低)则可能并非如此。

所以,它的性能问题则是我们最感兴趣的,衡量性能需要测试它在浏览器中表现。所以,让我们做一个使用时间及内存的测试。

首先,让我们做一个参考页:它使用了100个<DIV>且它们具有相同的背景图片(不使用滤镜)。然后我们再做一个100个<DIV>背景相同但使用滤镜来实现的页面。使用100个滤镜来呈现背景的页面可能在一般的页面中不常见,但这样放大将帮助我们更好的测试。它将显示出每个页的“价格”。(译者:作者在这里创造了一个“价格”,是为了说明每个元素或每个页面中要消耗多少系统资源。)

时间从页面的onload事件后开始计时,图片也已经缓存,这样用以消除需要加载网页和图片的影响。内存消耗使用ProcessExplorer来帮助我们测量。

这里统计了一台双核2GHz CPU、500MB内存电脑的IE6中的10次结果。在一个不这么强大的电脑中,加载时间可能会更糟糕。

AlphaImageLoader测试结果
测试页时间(秒)内存(MB)
测试#1 – 无滤镜0.0310.6
测试#2 – 有滤镜0.84446.8

正如你可以看到,使用AlphaImageLoader的结果是相当的糟糕——测试页加载慢了27倍而且使用了78倍的内存。当然这些结果有很高的随机性——这只是一个图片且只在一台电脑上的测试(相对强大且未尽其用)。由于不同的图片,应用于不同的元素的数目及不同的电脑,结果可能有很大的不同,特别是当只有较少的内存和CPU或者把网络延迟(副作用#1)也加入统计。但这个例子说明了重要的概念:

  • AlphaImageLoader是缓慢的,它需要更多的内存

  • 它对的每个使用它元素的起作用,而不是每张图片

如果你有一张雪碧图并且你使用的滤镜于不同的元素(使用Alpha透明的雪碧图是非常棘手的,但也不是完全不能用),那么每个使用雪碧图的元素都会消耗更多的系统资源。

雅虎搜索案例研究

使用上面AlphaImageLoader实验测试中的“价格”理念,你可能想象或计算出要为每个滤镜使用多少的系统资源。但一个百万级在不同的浏览器、电脑、带宽和世界各地的测试能更好的说明这个问题。

雅虎的搜索结果页曾经使用PNG32雪碧图且使用AlphaImageLoader来实现透明度(旧版本的雪碧图仍然存在,如果你很好奇)。如果更换成PNG32为颜色有损的PNG8(以前讨论过)能降低50-100ms的页面加载时间为IE5-6用户。100ms可能并不起眼,但相对于使用滤镜的页面,它至少节省了10%的时间。此外,根据亚马逊研究,100ms的速度意味着1%的销售会减少(即使他们是内容型网页)。增加1%的收入而只需要更换一个图片看起来是笔好买卖。

所以,现在怎么做?

最好的事情是避免AlphaImageLoader像雅虎搜索一样,花时间去创造PNG8让它在IE6及其它浏览器中都有最好的表现。那么如何创建一个优美的PNG8呢?首先创建一个GIF图片,只有一个完全透明或完全不透明的像素。然后确保它看起来可以接受的(如同它在IE6的表现),继续加强与半透明有关的像素比如圆角或任何受益于透明度的图像。遗憾的是,据我所知,Fireworks是目前唯一使PNG8拥有Alpha透明度的图像处理软件。你也可以尝试其它工具,如命令行工具 pngnqpngquant,但因为自动PNG32到PNG8的转换不是总令人满意,你可能需要手动选择完全不透明的像素。

可能有这样的情况:当你将无法用PNG8达到效果而一定需要使用AlphaImageLoader——例如当大部分或全部图像是半透明(比如视频缩略图上的“PLAY”图标)。Dave Artz在美国在线有一些 其他案件显示PNG8并不够完美。在这些情况下(当然,也在你尽量说服设计师重新考虑使用透明度未果情况下),请确保你使用下划线HACK(_filter),使之不影响IE7的用户。

有时,有人用为IE6使用GIF而为其它浏览器使用PNG32,但是这样完全没有必要,一个PNG8就能在兼容两种不同的显示和alpha透明。

使用PNG8的更多好处:

  1. PNG8通常比PNG32小

  2. 在所有浏览器下只使用一个图像

  3. CSS比较清爽,不用特别使用HACK或标签

  4. 背景能够平铺

0
投稿

猜你喜欢

  • 如果遇到下述错误,表示当启动mysqld时或重新加载授权表时,在用户表中发现具有非法密码的账户。发现用户'some_user'
  • 由于 window.onload 事件需要在页面所有内容(包括图片等)加载完后,才执行,但往往我们更希望在 DOM 一加载完就执行脚本。其实
  •  <% set conn=server.createobject("adodb.connect
  • 在这篇文章(不敢妄称教程,最多称之为学习笔记)里,我会从头开始实现客户端模板的效果。不过你不要期望能够在这里找到可以直接拿去使用直接复用灵活
  • 1 Video介绍引用我翻译文档《在HTML5页面中嵌入音频和视频》中的介绍文字:“当今,在网页上嵌入视频且所有用户不管使用任何浏览器或者操
  • 1.首先,我们需要过滤所有客户端提交的内容,其中包括?id=N一类,另外还有提交的html代码中的操作数据库的select及asp文件操作语
  • 下面是Sql Server 和 Access 操作数据库结构的常用Sql,如如何新建一个表,如何删除表,如何删除数据,插入数据等等..希望对
  • 二级域名的解析指向ASP源代码,懂程序的人一看就明白怎么实现了。呵呵!真简单<%@  LANGUAGE  =&nb
  • 1.MySQL中并发和隔离控制机制Meta-data元数据锁:在table cache缓存里实现的,为DDL(Data Definition
  • 同事在准备新老系统的切换,清空一个表的时候往往发现这个表的主键被另一个表用做外键,而系统里有太多层次的引用.所以清起来相当麻烦用下面这个脚本
  • 日历功能在个人博客网站及一些任务类网站都有广泛的应用,当然,在一些通用网站的后台也不乏这些日历功能的综合应用,所以,一个结构合理、代码清晰的
  • 如何向前端推送用户请求的信息?postinfo.htm<head><title>asp教程之回应用户请求信息&nbs
  • 如果一张表的数据达到上百万条,用游标的方法来删除简直是个噩梦,因为它会执行相当长的一段时间……   开发人员的噩梦——删
  • 以下插件是我在项目中经常使用的jQuery插件,不见得是最好的,但是我目前接触到的jQuery插件中最适合我的。01. jQuery.Fle
  • SQL Server对上亿的表进行排序或者上亿的表之间进行join,会导致系统失去响应。◆1.我确实做了一个很大的查询,涉及的数据表有两亿条
  • JavaScript Dom编程 学习书籍选择JavaScript Dom编程学习,很多朋友无疑对如何选择入门的书籍,比较头疼。或许也是他们
  • Office家族成员中,人们对于Access 2000的了解,往往只局限在它的操作界面中,对于数据库管理的功能仍只是停留在建立表、数据输入、
  • 斐波那契记忆优化法:<script type="text/javascript">var fibonacci
  • 出差到了中国雅虎,这里的风格和淘宝很不一样。和雅虎一比,淘宝的办公环境就是个菜市场,闹哄哄,到处是人,在走道里狂奔乱窜,在每个会议室争得面红
  • CSS代码更清晰高效的一些经验是许多网页制作者与开发者都关心的问题。但是大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,合理的
手机版 网络编程 asp之家 www.aspxhome.com